我使用最小起订量进行了以下单元测试验证:
var mock = new Mock<IDoSomethingUseful>();
var sut = new Thingy(mock.Object);
sut.CallDoSomethingUseful();
mock.Verify(
somethingUseful => somethingUseful.Move(
It.Is<MyVector>(
myVector => myVector.x == 123)), Times.Once, "This fail message needs to be hard-coded with myVector.x was not equal to 123");
- 如何让 Verify() 告诉我谓词匹配失败?测试运行程序仅报告调用失败,因此我需要依赖硬编码的消息。
使用Callback
可以访问调用参数。请参阅此处的回调部分。
在您的情况下,您可以将x
的预期值添加到测试中,并在回调中获取实际值。最后,使用 Assert 验证预期值和实际值是否相等,其中可以使用这两个值设置消息的格式。呵呵
int expected_x_value = 123;
int actual_x_value = 0;
var mock = new Mock<IDoSomethingUseful>();
mock.Setup(m => m.Move(It.IsAny<MyVector>()))
.Callback<MyVector>(
(v) =>
{
actual_x_value = v.x;
}
);
var sut = new Thingy(mock.Object);
sut.CallDoSomethingUseful();
Assert.AreEqual(expected_x_value, actual_x_value,
string.Format("myVector.x was expected to be called with x = '{0}' but was '{1}'",
expected_x_value, actual_x_value));