【发布时间】:2012-05-23 01:19:14
【问题描述】:
我需要测试以下方法:
CreateOutput(IWriter writer)
{
writer.Write(type);
writer.Write(id);
writer.Write(sender);
// many more Write()s...
}
我创建了一个最小起订量的IWriter,我想确保以正确的顺序调用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));
但是,在 CreateOutput() 中对 Write() 的第二次调用(写入 id 值)会引发 MockException 并显示消息“IWriter.Write() 调用失败,模拟行为严格。所有模拟上的调用必须有相应的设置。"。
我还发现很难找到任何明确的、最新的 Moq 序列文档/示例。
是我做错了什么,还是不能使用相同的方法设置序列? 如果没有,我可以使用其他方法(最好使用 Moq/NUnit)吗?
【问题讨论】:
-
latest release of Moq, v4.2 根据其release notes 具有“改进的模拟调用序列测试”。
-
我使用的是 v.4.2.x 并且可以确认序列功能对我有用。
标签: c# unit-testing nunit moq sequential