我有一个像这样的接口
public interface IConnection
{
Strategy Gc { get; }
bool IsConnected();
bool Connect();
}
我想单位使用此接口的类测试方法。现在,我想设置GC,但恰好是阅读的。有没有一种方法可以在不更改此接口类的情况下设置GC字段?我正在使用MS Fakes和Nsubstitute进行单位测试。但是,显然没有一个提供解决方案。 PrivateObject
也不起作用。
更改接口不是一个选项。建议更好的解决方案。
使用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以获取更多信息即可。