首页 文章

我可以使用MOQ来模拟未来的实例吗?

提问于
浏览
1

我是单元测试的新手,并试图找出更多关于MOQ的信息 .

是否有API允许我模拟某种类型的未来实例?我的意思是,
假设我在嘲笑一个 class . 在该类中,我使用new运算符来创建对象的新实例 .
我想模拟将来在该类中创建的相同类型的对象的所有未来实例,是否有这样的API?

我试着查看MOQ文档,但没有这样的例子 . 帮助任何人?

1 回答

  • 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
    

相关问题