是否可以检查发送到 Mocked 方法的对象的属性?例如我有:
public class Foo
{
int SomeNumber {get; set;}
}
public class ReceivesFoo: IReceivable
{
public void Process(Foo foo)
{
}
}
public class Bar
{
private IReceivable receiver;
public void SomeMethod(int b)
{
Foo foo = new Foo();
if (b == 0)
{
foo.SomeNumber = 12;
}
else
{
foo.SomeNumber = 7;
}
receiver.Process(foo);
}
}
public class TestBar
{
public void ZeroReceives12()
{
mockReceivable.Setup(x => x.Process(It.IsAny<Foo>());
bar.SomeMethod(0);
}
}
这是一个相当简化的过程,但希望您知道我的意思。我知道在一个方法中创建一个新类是个坏主意。所以这是在工厂的其他地方完成的。但是设置新对象的各种属性的所有逻辑都是在这个方法中完成的。因为把那个逻辑放在工厂里是没有意义的,因为它与工厂无关,事情会根据 Bar 的状态而改变。
所以基本上我只想能够做的不仅仅是验证模拟接收者会收到某种 Foo。我想确保它收到了 Foo 的一个实例并且它的 SomeNumber 被设置为 12。
最佳答案
这对您来说是一个很好的引用... https://github.com/Moq/moq4/wiki/Quickstart
基本上你想要这样的东西......
public void ZeroReceives12()
{
int input;
mockReceivable.Setup(x => x.Process(It.IsAny<Foo>())
.Callback(y => foo = y);
bar.SomeMethod(0);
// ensure input is what you expect
}
关于c# - 使用 Moq 检查传递回 mock 的对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651843/