【发布时间】:2014-09-01 08:48:05
【问题描述】:
我正在寻找在设置将从“被测系统”(sut) 中多次调用的模拟对象时moq's Setup 方法的确切工作原理的解释
例如:
如果我有一个模拟对象设置并调用我的 Sut 方法。
var inputParamObject = new inputParamObject();
this.mock.Setup(x => x.MethodCall(inputParam).Returns(this.mock.Object);
Sut.WithCallLoopingMethodThatCallsTheMockObject();
现在,我正在处理的真实代码是遗留代码,几乎不可能在这里展示,所以很遗憾,这只是我认为正在发生的事情的简单表示。
我看到的问题是,如果 inputParamObject 用于循环的第一次迭代,它会返回正确的模拟对象。但是,在第二次迭代中,它返回 null。
如果我将上面的代码更改为使用第二个 InputParamObject,它将再次返回模拟并且我的测试将通过:
var inputParam = new InputParam();
var inputParam2 = new InputParam();
this.mock.Setup(x => x.MethodCall(inputParam).Returns(this.mock.Object);
this.mock.Setup(x => x.MethodCall(inputParam2).Returns(this.mock.Object);
Sut.WithCallLoopingMethodThatCallsTheMockObject();
我认为模拟上的第二个设置会简单地覆盖第一个,但似乎并非如此。我也知道我可以这样设置,测试会通过。
this.mock.Setup(x => x.MethodCall(It.IsAny<InputParamObject>).Returns(this.mock.Object);
抱歉,这是人为的示例,可能需要更多细节才能理解,但是,
谁能告诉我当我有一个设置调用而不是这个例子中的两个时发生了什么?
对于这种情况,还有一个指向特定参考资料的指针会很棒。
谢谢
【问题讨论】:
标签: unit-testing moq