我可以使用最小起订量来模拟未来的实例吗?

时间:2018-12-09 14:20:39

标签: c# unit-testing moq

我是单元测试的新手,想进一步了解最小起订量。

是否有一个API可以模拟将来的某种类型的实例? 我是说
假设我在嘲笑一堂课。在该类中,我使用new运算符创建对象的新实例。
我想模拟将来将在该类中创建的该对象的同一类型的所有将来实例,是否有这样的API?

我尝试查看起订量文档,但没有这样的示例。帮助任何人吗?

1 个答案:

答案 0 :(得分:2)

不要使用new,请使用依赖项注入和工厂。然后,您可以让您的课程创建模拟:

internal class SubjectUnderTest
{
    public SubjectUnderTest( IProductFactory factory )
    {
        _factory = factory;
    }

    public void DoStuff()
    {
        var product = _factory.CreateProduct(); // this creates a mocked product (where you new'ed something before)
        product.DoSomeThing(); // this calls into the mock product
    }

    private readonly IProductFactory _factory;
}

然后测试会像这样

var mockFactory = new Mock<IProductFactory>();
mockFactory.Setup( x => x.CreateProduct() ).Returns( () => 
{
    var mockProduct = new Mock<IProduct>();
    // TODO setup product mock here
    return mockProduct.Object;
} );
var instance = new SubjectUnderTest( mockFactory.Object );
instance.DoStuff(); // <- uses the factory mock defined above to create a mocked product and calls into the mocked product