如何使用 VS 假货有条件地存根方法

本文关键字:存根 方法 有条件 何使用 VS | 更新日期: 2023-09-27 17:56:41

使用 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假货来实现这一点?代码如下所示:

// 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();

但是您将如何设置其他条件案例?

编辑:我应该提到我确实意识到这是一个奇怪的设置,通常你不会在一个单元测试中测试存根的不同实现。这是一个纯粹的学术问题 - 我不会将这种类型的代码放在单元测试中......可能。

如何使用 VS 假货有条件地存根方法

因为使用 Fakes,您基本上可以提供委托作为生成的存根方法的实现,所以您可以将任何条件逻辑放入该委托中。

在您的情况下,以下设置(如果等效于最小起订量示例):

var stub = new StubIObject
{
    Foo = (value) => 
       {
           if (value == 100)  
              // This covers the case (It.Is<int>(t => t == 100))
              return value * 1.10;
           return value;    // This covers the default case (It.IsAny<T>)
        }
};