我有这些模仿者:
_processWrapperMock = new Mock<IProcessWrapper>(MockBehavior.Strict);
_processStartInfoMock = new Mock<IProcessStartInfo>();以及Start()方法的设置:
_processWrapperMock.Setup(m => m.Start(_processStartInfoMock.Object))
.Returns(new Process());我的_processWrapperMock实例被传递给对象的构造函数,该构造函数包含我正在测试的方法。
var wrapper = new WrapperClassImTesting(_processWrapperMock.Object);然后执行正在测试的方法:
byte[] output = wrapper.MethodImTesting(someParams);在MethodImTesting中,执行_processWrapperMock的Start方法,但是我以前的设置似乎没有被考虑在内。我得到的错误是在线上:
using (var process = _processWrapper.Start(processStartInfo))投掷:
模拟异常未被用户代码处理
严格的模拟行为导致IProcessWrapper.Start(GraphVizWrapper.ProcessStartInfo)调用失败。模拟上的所有调用都必须有相应的设置。
我在做什么/不做什么,我需要做什么才能像我期望的那样起作用?
发布于 2011-09-21 11:12:56
为什么还要制造一个模拟..。你就不能这么做吗?
_processWrapperMock.Setup(m => m.Start(It.IsAny<IProcessStartInfo>)).Returns(new Process());您确定没有其他方法或属性正在被访问吗?
发布于 2011-09-21 11:14:31
这不只是意味着在模拟中调用了一个没有使用SetUp方法显式考虑的方法吗?
我通常避免严格的模拟,因为它们会导致脆弱的测试,但是如果您确实需要它们,那么我将确保没有任何东西被调用,而不是您所期望的。
https://stackoverflow.com/questions/7498729
复制相似问题