我正在使用Moq对我的工厂进行单元测试,并随后执行它的产品。
我有一个ParameterAlgorithmFactory
(返回算法以将报告参数计算为 a IVisibilityParameterAlgorithm
)和工厂内的一个方法,该方法调用其中Execute()
的每一个。
为了对此进行测试,我编写了一个单元测试,如下所示:
//Verfiy that execute is called on all algorithms produced by factory
[TestMethod]
public void ParameterAlgorithmFactory_ReturnedAlgorithm_ExpectExceuteCalled()
{
var mockFactory = new Mock<IParameterAlgorithmFactory>();
var parameterAlgorithm = new Mock<IVisibilityParameterAlgorithm>();
mockFactory.Setup(x => x.Create(LineType.Adjustment)).Returns(parameterAlgorithm.Object);
new ReportParameters().CreateParameters(new DataSet(), mockFactory.Object);
parameterAlgorithm.Verify(x=> x.Execute(new DataSet()));
}
如您所见,我正在parameterAlgorithm
从我的模拟工厂返回一个模拟算法(),然后我想验证它已经Execute()
调用过。
但是我不断得到:
Moq.MockException:预期在模拟上至少调用一次,但从未执行过:x => x.Execute(new DataSet())
即使我可以调试并看到正在Execute()
编辑的行。
也许我在我的工厂里做的太多(返回一个算法并执行它)或者我以错误的方式使用 Moq ?
非常感谢有关此测试失败原因的任何反馈。