Насколько быстрее NUnit по сравнению с MSTest

Рой Ошеров, автор книги Искусство модульного тестирования, имеет прокомментировал в блоге, что из многих вещей, которые NUnit якобы делает лучше, он намного быстрее их.

Мой вопрос: насколько быстрее, если вообще? Мы говорим о порядке величины? 10%? 50%?

Я спрашиваю об этом, потому что на данный момент я не могу сравнивать их. Я пытаюсь настроить свой тестовый проект на двухрежимный, чтобы я мог переключаться между ними. К сожалению, у меня возникла проблема с интеграцией NUnit с последней версией Microsoft Moles, а также с NUnit конфликтует со сторонней библиотекой (похоже, связанной с log4net).

Пока что MSTest кажется намного проще использовать в Visual Studio 2008. Все проблемы с версией и проблемы совместимости с NUnit (по крайней мере, для меня) подталкивают меня к выбору MSTest в качестве фреймворка для проекта (хотя я могу сохранить двойной режим вариант). Еще один плюс MSTest в том, что я все еще могу использовать большинство утверждений NUnit с:

using Assert = NUnit.Framework.Assert;
using Is = NUnit.Framework.Is;

Но .... Если скорость действительно намного выше в NUnit, я бы предпочел использовать ее, несмотря на болевые точки.

И наконец, улучшилась ли скорость VS2010 для MSTest?


person Matt    schedule 27.09.2010    source источник


Ответы (2)


Что ж, я нашел время, чтобы удалить Microsoft Moles и производственный код, который имел дело с проблемами, связанными с log4net, чтобы я мог действительно сравнить их. Затем я провел тесты как в MSTest 2008, так и в NUnit 2.5.2.

Я обнаружил, что MSTest лучше сообщает продолжительность каждого отдельного теста. Если тест выполняется в NUnit достаточно быстро, он регистрируется как 0 секунд как в файле TestResults.xml, так и в графическом интерфейсе пользователя, когда вы нажимаете на свойства теста. Тем не менее, я попытался сравнить сумму всех тестовых скоростей, и в некоторых случаях NUnit быстрее, а в других случаях MSTest быстрее. Когда один из них быстрее другого, это примерно на 30%.

Теперь, когда NUnit определенно кажется быстрее, так это время ожидания перед запуском модульных тестов. Когда я подключаю графический интерфейс (или консоль) к VS Debugger и запускаю тестовый проект, запуск и загрузка NUnit занимает около 3-6 секунд, прежде чем тесты могут быть выполнены. С MSTest это занимает от 15 до 20 секунд. Для MSTest не имеет значения, 1 тест или 26, время загрузки кажется одинаковым. Что касается того, как масштабируется это время ожидания по мере того, как тестовый проект становится больше, скажем, в тысячах модульных тестов, я не могу прокомментировать разницу, хотя мне было бы очень интересно узнать.

Также, похоже, есть небольшая задержка в MSTest во время выполнения тестов, возможно, для обновления панели результатов. Таким образом, я подозреваю, что когда люди говорят, что NUnit намного быстрее, чем MSTest, это происходит из-за задержек загрузки и обновления, но фактическое время выполнения теста оказывается очень похожим.

person Matt    schedule 02.10.2010

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

Причина, по которой я выбрал MSTest, - это его интеграция с Visual Studio, поскольку он значительно упрощает работу. Вдобавок однажды у меня возникли проблемы с запуском пары тестов, потому что тесты NUnit выполнялись в другом приложении потоков, чем MSTests.

person Damian Schenkelman    schedule 27.09.2010
comment
Если использование NUnit и интеграция с VS важны, вы можете использовать плагины для запуска тестов (такие как TestDriven.NET и Resharper) для запуска модульных тестов из VS. Это не совсем то же самое, что встроенная программа запуска тестов, которая работает только с MSTest. Но для некоторых это может быть хорошим решением. - person Jon Turner; 03.11.2010