使用起订量来验证呼叫是否按正确的顺序进行

2024-03-15

我需要测试以下方法:

CreateOutput(IWriter writer)
{
    writer.Write(type);
    writer.Write(id);
    writer.Write(sender);

    // many more Write()s...
}

我创建了一个 Moq'dIWriter我想确保Write()方法以正确的顺序调用。

我有以下测试代码:

var mockWriter = new Mock<IWriter>(MockBehavior.Strict);
var sequence = new MockSequence();
mockWriter.InSequence(sequence).Setup(x => x.Write(expectedType));
mockWriter.InSequence(sequence).Setup(x => x.Write(expectedId));
mockWriter.InSequence(sequence).Setup(x => x.Write(expectedSender));

然而,第二次调用Write() in CreateOutput()(写出id值)抛出一个MockException与消息“IWriter.Write() 调用失败,模拟行为严格。模拟上的所有调用都必须有相应的设置。".

我还发现很难找到任何明确的、最新的起订量序列文档/示例。

我是否做错了什么,或者我不能使用相同的方法设置序列? 如果没有,我可以使用其他替代方案吗(最好使用 Moq/NUnit)?


当出现错误时在同一个模拟上使用 MockSequence http://code.google.com/p/moq/issues/detail?id=291。它肯定会在 Moq 库的后续版本中修复(您也可以通过更改来手动修复它)Moq.MethodCall.Matches执行)。

如果您只想使用 Moq,那么您可以通过回调验证方法调用顺序:

int callOrder = 0;
writerMock.Setup(x => x.Write(expectedType)).Callback(() => Assert.That(callOrder++, Is.EqualTo(0)));
writerMock.Setup(x => x.Write(expectedId)).Callback(() => Assert.That(callOrder++, Is.EqualTo(1)));
writerMock.Setup(x => x.Write(expectedSender)).Callback(() => Assert.That(callOrder++, Is.EqualTo(2)));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用起订量来验证呼叫是否按正确的顺序进行 的相关文章

随机推荐