Moq Intercept FactoryMock New Instance - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть класс Factory с методом Create, возвращающим объекты IFoo.Я создал класс FactoryMock, который реализует интерфейс как виртуальные методы и возвращает настройку IFoo mocks с базовыми функциями.Пока все хорошо.

Если тестируемый метод возвращает IFoo, все хорошо, IFoo создается и используется, и я могу убедиться, что он использовался правильно.

Если тестируемый метод делаетне вернуть IFoo, однако, как я могу перехватить объект IFoo, созданный на фабрике?

Я мог бы сделать что-то подобное ... но могу ли я получить доступ к возвращаемому значению CallBase из Callback?

var factory = new Mock<FactoryMock>() { CallBase = true };
factory.Setup(x => x.Create).CallBase().Callback(() => ...);

Другой вариант - добавить свойство LastCreated в FactoryMock.Какой подход рекомендуется для этого сценария?

1 Ответ

0 голосов
/ 08 февраля 2019

Поскольку ответа нет, я нашел простой способ его решить.В FactoryMock я просто добавляю открытое свойство «public Instances», которое содержит все экземпляры, созданные фабрикой.Затем я могу легко получить доступ к этим экземплярам и напрямую использовать FactoryMock, не оборачивая Moq вокруг него;но вернуть объекты IFoo как типы Moq.Не уверен, что другие так поступают, но для меня этого достаточно.

РЕДАКТИРОВАТЬ: я понимаю, что я делаю модульное тестирование неправильно.В этом сценарии я сосредотачиваюсь на том, «как это делается», а не на конечном результате, и на самом деле я нарушаю большинство лучших практик.Если кто-то задает тот же вопрос, это хороший документ о передовых методах проведения тестов.Теперь нужно все переписать:)

https://docs.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices

...