2016-09-11 3 views
2

Полезно ли использовать Autofac и moq для разработки теста интеграции? Большинство примеров и документации, которые я нашел в Интернете, сосредоточены на использовании двух тестов Unit. Любой хороший пример для теста интеграции? И интеграционным тестом я имею в виду некоторый подход, подобный кнопке вверх, сверху вниз или сэндвич-подходам.Интеграционный тест с использованием Autofac и Moq

+0

Зачем вам нужен мок для тестирования интеграции? Зачем вам нужен Autofac для модульного теста? –

+0

Пожалуйста, сначала прочитайте мой вопрос, я ничего не писал о необходимости использования Autofac или Moq, я прошу совета, если он рассчитывает использовать их для целей интеграционного тестирования. – Mindan

ответ

4

Я рекомендую вам определить, что вы подразумеваете под интеграционным тестом, поскольку этот термин не имеет ни одного принятого определения. Я предполагаю, что вы имеете в виду тестирование целого приложения изолированно, т. Е. Тестирование нескольких (возможно, сотен) классов вместе, но без взаимодействия с внешними системами (например, базы данных, службы http).

Это отличная идея ввести какую-либо инъекцию зависимостей или инверсию управления в ваш проект. Независимо от того, используете ли вы Autofac или какое-либо другое решение, преимущества в тестах интеграции одинаковы - инъекция зависимости позволяет вам заменить биты вашей системы, которые общаются с внешним миром, например. ваш DAO, с макетной или заглушкой версии, которая работает в памяти. Например, в производстве вы, возможно, использовали DAO, поддерживаемый внешней базой данных MSSQL, но в тестах интеграции вы использовали бы заглушку DAO, поддерживаемую в словаре Dictionary или HashMap.

Что касается Moq, я бы не рекомендовал использовать Moq для интеграционных тестов. Mocking отлично подходит для тестов Unit, потому что Unit Tests тестирует очень маленькие области с системой, и взаимодействие с макетным объектом часто бывает простым (если нет, то, возможно, вам следует реорганизовать ваш Unit Test!). Однако с интеграционными тестами вы тестируете всю свою систему, и вполне возможно, что будет много и много взаимодействий с объектом, который вы пытаетесь высмеять. Кроме того, по мере изменения системы взаимодействие с макетом может измениться, даже если результаты остаются неизменными. Из-за этого становится очень сложно и утомительно настраивать и поддерживать макет для теста интеграции, потому что часто вам приходится настраивать многие вызовы методов.

Кроме того, интеграционные тесты могут быть многопоточными, и вещи могут не всегда выполняться в одном порядке. Опять же, сложно насмехаться!

Лучшим подходом к интеграционным испытаниям является фактическое внедрение в память версии вашего объекта. Он должен вести себя как можно ближе к реальной вещи. Вероятно, вам придется добавить к этому дополнительные методы в реализации памяти, чтобы делать такие вещи, как настройка начального состояния (в примере DAO, настройка некоторых тестовых данных) или проверка вывода. В долгосрочной перспективе вы найдете это гораздо более гибким, так как растет база интеграции.

Чтобы быть ясным, я думаю, что Moq очень полезен для тестов единиц, а не для тестов интеграции.

Смежные вопросы