【问题标题】:How to run a function when return value is void upon setup in Moq在 Moq 中设置时返回值无效时如何运行函数
【发布时间】:2017-08-06 05:34:17
【问题描述】:

所以当有返回值时,我可以在 Moq 中做到这一点

mockStudentRepository.Setup(m => m.Create(It.IsAny<IStudent>())).Returns<IStudent>(s =>
{
    students.Add(s);
    return 1;
});

所以这个 lambda 作为存储库的模拟实现运行。

当方法返回 void 时,我该怎么做?当我尝试相同的代码时,退货不可用。我现在有这样的事情:

mockStudentRepository.Setup(m => m.Update(It.IsAny<IStudent>()));

我想放置一个 lambda,它会在调用 Update 时运行,就像上面的第一个代码一样。我该怎么做?

【问题讨论】:

  • 你尝试了什么?首先测试您的代码而不模拟 m.Update
  • 对不起,这完全是我的意图,模拟这个方法。我不想为它运行实际的代码,我只想让它运行一个假的实现。我尝试的是我创建了一个学生存储库的假实现,它肯定可以工作,但我只想为该方法运行一个 lambda,而不是实现学生存储库。
  • 您在寻找回调方法吗?也许QuickStart 页面有一个适合您需求的示例。

标签: c# unit-testing moq xunit.net


【解决方案1】:

我相信您正在寻找Callback 扩展。

mockStudentRepository
    .Setup(m => m.Update(It.IsAny<IStudent>()))
    .Callback<IStudent>(s => {
        var student = students.Where(x => x.Id == s.Id).FirstOrDefault();
        if(student != null) {
                //...
        }
    }); 

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多