在 Moq 中设置时返回值为空时如何运行函数

g_b*_*g_b 3 c# unit-testing moq xunit.net

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

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

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

当方法返回 void 时,我该如何执行此操作?当我尝试相同的代码时,返回不可用。我现在有这样的事情:

mockStudentRepository.Setup(m => m.Update(It.IsAny<IStudent>()));
Run Code Online (Sandbox Code Playgroud)

我想放置一个 lambda,它将在调用 Update 时运行,就像上面的第一个代码一样。我怎样才能做到这一点?

Nko*_*osi 5

我相信您正在寻找扩展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) {
                //...
        }
    }); 
Run Code Online (Sandbox Code Playgroud)