0

NSubstitute 在其文档中这样说:

返回接口的方法 [...] 将自动返回自己的替代品。

通常这就足够了。但是,当我这样做时:

测试方法:

IUnityContainer unity = Substitute.For<IUnityContainer>();
MyMethod(unity);

实际方法:

    public void MyMethod(IUnityContainer container)
    {
        this.container = container;

        myObject = container.Resolve<ISomeObject>();

        myObject.CallSomeMethod();
    }

Resolve 方法返回一个类。所以它没有被嘲笑。这意味着当我调用时我在 myObject 中得到 null 和 null 引用异常CallSomeMethod

如果我可以只返回一个模拟类(除非我专门覆盖了该接口),那就太好了。

有没有办法使用NSubstitute来获得这个?

4

1 回答 1

2

如果ISomeObject是一个接口,这应该可以正常工作。如果您想获得自动替换类,则该类需要有一个默认构造函数,并将其所有公共成员声明为虚拟。

以下测试通过了我:

public interface IFactory { T Resolve<T>(); }
public interface ISomeObject { void CallSomeMethod(); }

public class Tests
{
    [Test]
    public void Example()
    {
        var factory = Substitute.For<IFactory>();
        MyMethod(factory);
    }
    public void MyMethod(IFactory container)
    {
        var myObject = container.Resolve<ISomeObject>();
        myObject.CallSomeMethod();
    }
}
于 2012-05-16T02:00:25.990 回答