我想用匿名参数测试方法执行,但属性已知。
public interface IToTest
{
void MethodToTest(object data);
}
这就是我尝试实现这一目标的方式:
Mocker.Mock<IToTest>
.Verify(x=>x.MethodToTest(
It.Is<object>(
obj=>obj.Equals(new { DataProperty = "Test"})
)),
Times.Once());
测试未通过。
我不想用
It.IsAny<object>()
因为我知道预期的数据。
最佳答案
您需要在委托(delegate)中使用反射来进行比较,或者使用类似 FluentAssertions
的东西来卸载繁重的工作
例如
//...
var expected = new {
DataProperty = "Test"
//...known properties
};
Func<object, bool> match = _ => {
_.Should().BeEquivalentTo(expected);
return true;
};
Mocker.Mock<IToTest>
.Verify(x =>
x.MethodToTest(It.Is<object>(obj => match(obj))),
Times.Once());
或者,您可以改为在回调中捕获对象参数,然后使用流畅的断言断言捕获的参数。
关于c# - 如何验证 Moq 中的对象类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55649332/