Я ищу, чтобы начать с объектами в моих модульных тестах. Кажется, есть множество хороших насмешливых рамок.
- У разных фреймворков разная целевая аудитория?
- Какие факторы я должен учитывать при выборе подходящей структуры для моей ситуации?
Я ищу, чтобы начать с объектами в моих модульных тестах. Кажется, есть множество хороших насмешливых рамок.
Ответы:
Да. Некоторые фреймворки, такие как Microsoft Moles , TypeMock Isolator и JustMock , позволяют вам высмеивать что угодно. Эти инструменты для подражания, как правило, лучше для разработчиков, желающих использовать их в существующем унаследованном коде, поскольку может оказаться невозможным преобразовать их в более удобный для тестирования дизайн. *
Традиционно тестируемые проекты означают, что кодовая база должна свободно использовать интерфейсы, абстрактные классы, виртуальные методы, незапечатанные классы и т. Д. Следовательно, традиционные среды для моделирования, такие как Moq и RhinoMocks, хорошо работают с кодом, разработанным с использованием Test Driven Development, Dependency Injection и другие такие понятия. Кстати, я очень рекомендую использовать Dependency Injection, поскольку вы получаете гораздо больше, чем просто тестируемый код, но также и более поддерживаемый код.
* См. Эффективная работа с унаследованным кодом , чтобы узнать, как медленный рефакторинг кода без тестов в код, который можно использовать с традиционными инструментами тестирования (и насмешек).
Учебник Moq имеет раздел на фоне, философии и споры в самом начале , где обсуждается это в отношении нескольких конкретных инструментов: TypeMock изолятор, RhinoMocks и Moq. Он написан для объяснения Moq, поэтому, естественно, немного искажен, но я обнаружил, что это очень полезно для меня, когда я пытаюсь понять некоторые различия в фреймворках.
Я нашел ответы на эту тему SO на C # Mocking Frameworks также полезными. Большинство просто ссылаются на одну Mocking Framework, которую пользователь действительно считает полезной, но есть ответ от HaraldV о путях, которые обсуждают прокаты на основе прокси и профилирования на основе профилировщика.
Я также смог найти таблицу сравнения в Интернете. Обратите внимание, что это с 2009 года, поэтому я не уверен, что это актуально; есть по крайней мере один комментарий, в котором говорится, что информация о TypeMock и обратных вызовах устарела, но диаграмма может быть полезна для постановки вопросов, которые следует учитывать, даже если вам нужно будет выполнить работу, чтобы увидеть текущее состояние: RhinoMocks, Moq, NMock, и сравнительная таблица TypeMock
В Google Code есть проект с тестовыми примерами в нескольких средах моделирования для простого сравнения кода: mocking-frameworks-Compare
В моей команде мы выбрали Microsoft Moles . Он значительно выигрывает на # 2, # 3 и # 4, хотя он менее идиоматичен, чем большинство альтернатив, и находится на низком уровне на # 1.