【问题标题】:Moq: How to ensure Verify() reports on non-matching parametersMoq:如何确保 Verify() 报告不匹配的参数
【发布时间】:2016-02-11 16:44:16
【问题描述】:

我使用 Moq 进行了以下单元测试验证:

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() 告诉我谓词匹配失败?测试运行器只报告调用失败,所以我需要依赖硬编码的消息。

【问题讨论】:

    标签: moq


    【解决方案1】:

    使用Callback 可以访问调用参数。请参阅回调部分here


    在您的情况下,您可以将 xexpected 值添加到测试中,并在 Callback 中获取 实际 值。最后使用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));
    

    【讨论】:

    • 谢谢迪,我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2011-12-04
    • 1970-01-01
    • 2013-02-28
    相关资源
    最近更新 更多