Как я могу измерить накладные расходы на фреймворк для фиксации (TypeMock)?

Я только начинаю оценивать имитирующие фреймворки для своей команды, и мне интересно, есть ли у кого-нибудь указатели на справочную документацию или опыт, которыми вы можете поделиться в отношении стоимости имитации при проведении тестов производительности.

Ссылки? Личный опыт? Детали оценены.


person Eric Schoonover    schedule 30.07.2009    source источник


Ответы (4)


IIRC TypeMock использует API-интерфейс Profiler, который обычно добавляет довольно много накладных расходов, но все же должен быть быстрее, чем запуск приложения через профилировщик.

NCover также использует Profiler API и кажется довольно быстрым.

person leppie    schedule 30.07.2009

Аарон Дженсен создал тестовый проект и провел некоторое тестирование производительности. http://codebetter.com/blogs/aaron.jensen/archive/2008/05/08/mock-framework-benchmarks.aspx

Я бы предпочел выбирать на основе API и возможностей, но производительность может быть проблемой с TDD и многократным запуском ваших тестов.

person Dennis van der Stelt    schedule 30.07.2009

Мы используем TypeMock в течение нескольких лет, и, по моему опыту, нет значительных накладных расходов на производительность (я уверен, что накладные расходы есть, это просто не большая проблема).

Однако в связи с особенностями работы TypeMock необходимо учитывать несколько моментов. Поскольку TypeMock в основном работает путем внедрения кода на лету, ошибки иногда могут быть очень экзотическими. Таким образом, сообщение об ошибках может стать довольно сложной задачей. Будьте готовы копаться в IL.

Мой опыт показывает, что «среднему разработчику» трудно объяснить, как работает TypeMock. Это быстро становится сложным, и, хотя их инструменты трассировки делают устранение неполадок выполнимым, все же остается небольшая задача поддержки.

Кроме того, поскольку TypeMock позволяет имитировать что угодно (кроме mscorlib), вам действительно не нужно добавлять необходимые уровни косвенного обращения к вашему коду. Это особенность, и TypeMock здесь не виноват. Тем не менее, я видел много разработчиков, пытающихся решить свои проблемы, повсюду насмехаясь, вместо того, чтобы разделять код. Это не улучшает общее качество кода IMO.

person Brian Rasmussen    schedule 30.07.2009
comment
TypeMock позволяет издеваться над DateTime.Now и StreamReader.ReadToEnd (думаю, начиная с версии 5.3.1) - person andreister; 22.11.2009

Я тестировал имитирующие фреймворки (в частности, Moq и TypeMock). TypeMock намного мощнее и гибче, но поскольку он подключается к фреймворку в качестве профилировщика, он действительно оказывает значительное влияние на производительность.

Я пришел к выводу, что TypeMock - отличный инструмент для сценариев ненагрузочного тестирования. Moq менее гибкий ... но намного легче и не оказывает большого влияния на общие характеристики. С Moq вы должны настроить свои приложения специально, чтобы иметь возможность имитировать внешние зависимости (в любом случае, упражнение в хорошем дизайне), но оказалось, что он намного лучше подходит для моих сценариев, связанных с нагрузкой.

К сожалению, в своих тестах я не записал фактических цифр, касающихся Moq и TypeMock, но по моему опыту преимущество в производительности Moq является значительным.

person Eric Schoonover    schedule 03.08.2009