设置似乎没有注册,并且抛出了MockException

本文关键字:MockException 注册 设置 | 更新日期: 2023-09-27 18:09:08

我有这些mock:

_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中,_processWrapperMockStart方法被执行,但是我之前的设置似乎没有考虑到。我得到的错误在这行:

using (var process = _processWrapper.Start(processStartInfo))
扔:

模拟异常未被用户代码处理

IProcessWrapper.Start (GraphVizWrapper.ProcessStartInfo)调用模拟行为失败。模拟上的所有调用必须有一个相应的设置

我在做什么/不做什么,我需要让它像我期望的那样工作?

设置似乎没有注册,并且抛出了MockException

为什么要创建一个mock呢?你就不能这么做吗?

_processWrapperMock.Setup(m => m.Start(It.IsAny<IProcessStartInfo>)).Returns(new Process());

你确定没有其他方法或属性正在被访问吗?

这是否意味着在mock上调用了一个方法,而您没有使用SetUp方法显式地解释这个方法?

我通常避免严格模拟,因为它们会导致脆弱的测试,但如果你确实需要它们,那么我会确保没有任何你不期望的东西被调用