设置Moq以在调用方法时增加值

本文关键字:方法 增加值 调用 Moq 设置 | 更新日期: 2023-09-27 18:14:37

我有一个正在保存的POCO,像这样:

_myRepo.Save(somePoco);

_myRepo被模拟,例如:

var myRepo = new Mock<IRepo>();

当Save方法被调用时,我想将somePoco.Id设置为1。

我该怎么做?

我看到.Setup上有一个Callback方法,但它不通过POCO,例如:

myRepo.Setup(x => x.Save(It.IsAny<SomePoco>())
   .Callback(x => // how do i get the poco?);

设置Moq以在调用方法时增加值

参数被传递给Callback方法,您只需要显式指定类型。

所以下面的代码应该可以工作:

myRepo.Setup(x => x.Save(It.IsAny<SomePoco>())) 
       .Callback<SomePoco>(poco => { poco.Id = 1; });

参见快速入门中的示例:

// access invocation arguments
mock.Setup(foo => foo.Execute(It.IsAny<string>()))
    .Returns(true)
    .Callback((string s) => calls.Add(s));