为单元测试设置类的只读属性

3
我有一个这样的接口
public interface IConnection
{
    Strategy Gc { get; }

    bool IsConnected();

    bool Connect();
}

我希望对使用此接口的类的方法进行单元测试。现在我想设置Gc,但它恰好是只读的。有没有一种方法可以设置Gc字段而不更改此接口类?我正在使用 MS Fakes 和 Nsubstitute 进行单元测试。然而,显然都没有提供解决方案。 PrivateObject 也不起作用。

更改接口不是一个选项。建议更好的解决方案。

1个回答

10

使用 NSubstitute 很容易实现。首先为您的接口创建一个模拟对象:

var mock = Substitute.For<IConnection>();

现在,您可以通过为属性设置任何返回类型来模拟成员:

mock.Gc.Returns(Substitute.For<Strategy>());

最后将模拟的实例作为参数提供给依赖于这个实例的服务,例如:

var target = new MyClassToTest();
target.DoSomething(mock);  // mock is an instance of IConnection
现在,每当你的方法被调用,它都会返回一个 Strategy 的虚拟实例。当然,你也可以在 Returns 语句中设置任何其他任意的返回类型。有关更多信息,请参阅 http://nsubstitute.github.io/help/set-return-value

1
好的,它奏效了。我现在正在想为什么我以前没试过这个方法。 - Usama Aslam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接