最小起订量:如何确保 Verify() 报告不匹配的参数



我使用最小起订量进行了以下单元测试验证:

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));

最新更新