Могу ли я использовать MOQ, чтобы высмеивать будущие экземпляры? - PullRequest
0 голосов
/ 09 декабря 2018

Я новичок в модульном тестировании и пытаюсь узнать немного больше о MOQ.

Есть ли API, который позволяет мне высмеивать будущие экземпляры какого-то типа?Я имею в виду,
Допустим, я издеваюсь над классом.Внутри этого класса я использую оператор new для создания нового экземпляра объекта.
Я хочу смоделировать все будущие экземпляры того же типа этого объекта, которые будут созданы в этом классе в будущем, есть ли такой API?

Я пытался заглянуть в документацию по MOQ, но такого примера нет.Кому-нибудь помочь?

1 Ответ

0 голосов
/ 09 декабря 2018

Не используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...