[.Net] запуск из NUnit в 40 раз медленнее, чем из MSTest

6yrop

В коде используется Roslyn. Например, вот этот код:
http://stackoverflow.com/q/15365376/2724979
Запуск из:
NUnit — 2116ms
MSTest — 53ms
Консольное приложение — 57ms
Запуск MSTest с помощью TestDriven.Net — 1260ms
Запуск NUnit с помощью TestDriven.Net — 1100ms
Что это может быть?

Dasar

как время измеряется? в том смысле, что не попадает ли в интервал измерения какие-то действия по инициализации самого NUnit-а.
ps
Тормоза могут появляться из-за следующего:
1. NUnit вешает какие-то события на подгрузку assembly, типов и т.д. (или что-то подобное)
2. NUnit может замещать какие-то штатные типы на их прокси.
ps
как меняется время каждого запуска, если функцию Test вызывать несколько раз подряд

6yrop

ps
как меняется время каждого запуска, если функцию Test вызывать несколько раз подряд
речь только про первую итерацию, потом быстро везде

6yrop

1. NUnit вешает какие-то события на подгрузку assembly, типов и т.д. (или что-то подобное)
2. NUnit может замещать какие-то штатные типы на их прокси.
а почему связка MSTest+TestDriven.Net тормозит?

6yrop

а почему связка MSTest+TestDriven.Net тормозит?
MSTest+NCrunch тоже тормозит.
MSTest+ReSharper — тест выполняется быстро, если Интернет отключить. А если Интернет включен, то до того, как тест начнет выполняться, есть задержка (в отчете время теста не меняется). Чем медленнее Интернет, тем больше задержка.

Dasar

а почему связка MSTest+TestDriven.Net тормозит?
причины могут быть те же самые. Вешаются какие-то события на подгрузку ассемблей.
ps
кстати, такие framework-и предоставляют функционал, что файлы ассемблей не лочатся на время работы (это делается через перемещение assembly в tmp и подгрузку оттуда). Как раз этот функционал (и связанные с этим проверки) и может добавлять тормоза.

Dasar

MSTest+ReSharper — тест выполняется быстро, если Интернет отключить.
хз. может resharper лицензию или update-ы в инете ищет.
посмотри снифером куда лезет

6yrop

Тормоза могут появляться из-за следующего:
1. NUnit вешает какие-то события на подгрузку assembly, типов и т.д. (или что-то подобное)
2. NUnit может замещать какие-то штатные типы на их прокси.
Если это так, то получается, что на больших проектах не используют юнит тестирование? Поскольку NUnit/xUnit тормозные из-за оверхеда при перехвате инфраструктурных вещей, соответственно, когда размер проекта становиться большим оверхед становиться неприемлемым. А для MSTest нет нормального раннера.

freezer

кстати, единственное разумное объяснение: на анализ и копирование файлов сборок должно уходить немало времени, причём делаться это должно один раз, поэтому на повторных запусках и не тормозит. Возможно, там ещё какие-то инструментальные сборки налету создаются (особенно, если не через Emit, а через компиляцию).

Dasar

Если это так, то получается, что на больших проектах не используют юнит тестирование?
юнит тестирование на больших проектах делается в background-е на отдельном сервере - и секунды выполнения, соответственно, не критичны.
Оставить комментарий
Имя или ник:
Комментарий: