Moq - 模拟ILog.InfoFormat而不检查每个args

时间:2013-11-07 16:09:27

标签: unit-testing mocking tdd moq

我正在对我们现有的一些日志进行单元测试

在我的代码示例中的MyLoggingMethod(扩展方法)下面,应该使用大量参数调用log.InfoFormat。我不在乎传递了多少参数 - 或者内容 - 我只想验证从第一个参数记录的东西。

我已经制作了It.IsAnyLoadOfParameters - 但这正是我想要实现的目标!

        var logMock = new Mock<ILog>();
        var log = logMock.Object;
        log.MyLoggingMethod(new Monkey());
        logMock.Verify(moqLog => moqLog.InfoFormat(It.Is<string>(x => x.Contains("Blah blah blah")), It.IsAnyLoadOfParameters));

和log.MyLoggingMethod中的那种东西将是

log.InfoFormat("Blah blah blah {0} {1} {2} {3}", 1, "something", "blah", "four");

我知道我可以放很多It.IsAny - 但我想尽可能避免这种情况。我只是想检查第一个,以确保那里有东西。

1 个答案:

答案 0 :(得分:2)

It.IsAny<object[]>() 

做了伎俩!

    var logMock = new Mock<ILog>();
    var log = logMock.Object;
    log.MyLoggingMethod(new Monkey());
    logMock.Verify(moqLog => moqLog.InfoFormat(It.Is<string>(x => x.Contains("Blah blah blah")),  It.IsAny<object[]>()));