Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Moq中设置返回值无效时如何运行函数_C#_Unit Testing_Moq_Xunit.net - Fatal编程技术网

C# 在Moq中设置返回值无效时如何运行函数

C# 在Moq中设置返回值无效时如何运行函数,c#,unit-testing,moq,xunit.net,C#,Unit Testing,Moq,Xunit.net,所以当有一个返回值时,我可以在最小起订量中这样做 mockStudentRepository.Setup(m => m.Create(It.IsAny<IStudent>())).Returns<IStudent>(s => { students.Add(s); return 1; }); mockStudentRepository.Setup(m=>m.Create(It.IsAny())。返回(s=> { 学生。添加(s); 返回1; }

所以当有一个返回值时,我可以在最小起订量中这样做

mockStudentRepository.Setup(m => m.Create(It.IsAny<IStudent>())).Returns<IStudent>(s =>
{
    students.Add(s);
    return 1;
});
mockStudentRepository.Setup(m=>m.Create(It.IsAny())。返回(s=>
{
学生。添加(s);
返回1;
});
因此,这个lambda作为存储库的模拟实现运行

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

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

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

我相信您正在寻找分机

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

您尝试了什么?从测试代码开始,不要模仿m.UpdateSorry,这完全是我的意图,模仿这个方法。我不想为它运行实际的代码,我只想让它运行一个假的实现。我尝试的是我创建了一个学生存储库的假实现,这确实有效,但我只想为该方法运行lambda,而不是实现学生存储库。您正在寻找回调方法吗?也许页面上有一个适合您需要的示例。