使用moq,您可以在不同的输入条件下多次调用同一方法上的 Setup:
// Arrange
Mock<IObject> stub = new Mock<IObject>();
stub.Setup(method => method.Foo(It.IsAny<int>())
.Returns<int>(value => value);
stub.Setup(method => method.Foo(It.Is<int>(t => t == 100)
.Returns<int>(value => value * 1.10);
var sut = new TestedObject(stub.Object);
// Act
var actual = sut.Bar();
...
...等等。在这种情况下,Foo 方法采用一个整数,并根据传递的值确定该方法的实现。
有没有办法用 Visual Studio fakes 来完成这个?代码看起来像这样:
// Arrange
var stub = new StubIObject
{
Foo = (value) => value, // This covers the default case (It.IsAny<T>)
};
var sut = new TestedObject(stubIObject);
// Act
var actual = sut.Bar();
但是您将如何设置其他条件案例?
编辑:我应该提到我确实意识到这是一个奇怪的设置,通常你不会在一个单元测试中测试存根的不同实现。这是一个纯粹的学术问题 - 我不会将这种类型的代码放在单元测试中......可能。