Visual Studio 2012 MSTest против NUnit за и против
Мы должны решить, какую технологию использовать для нашего модульного тестирования. В настоящее время мы используем Visual Studio 2010 и не довольны MSTest, который пришел с этим. Он плохо работает, плохо работает (например, выходной каталог выходных данных теста не распознается правильно) и имеет несколько проблем при попытке протестировать сборки в 32-битной и 64-битной версиях. Хуже того, MSTest не имеет хорошего соответствия импеданса нашей системе сборки Jenkins. Поэтому мы подумали о переходе в NUnit. Тем не менее, никто в нашей команде не имеет достаточного воздействия на NUnit. Кроме того, мы скоро перейдем к Visual Studio 2012.
Мне нужно знать плюсы и минусы последней версии Visual Studio 2012 MSTest против Nunit. Поскольку большинство статей о переполнении стека связаны с более старыми версиями VS, они не связаны с нами. Думаю, с 2010 года Microsoft значительно улучшила MSTest. Просьба предоставить объективное сравнение с подробными техническими проблемами, с которыми вы столкнулись в обеих технологиях (только новые версии)
Ответы
Ответ 1
В настоящий момент я использую как MSTest, так и NUnit. IMHO NUnit по-прежнему является лучшим решением. Если у вас есть Visual Studio 2012 Premium edition, тогда это действительно неплохо, за исключением того факта, что вы не можете объединить тесты. Мне нравится, что он интегрирован в Visual Studio, но отсутствие группировки и возможность запуска подмножества тестов без ручного выбора - огромная проблема.
Анализ покрытия также довольно опрятен в Premium. Это быстро и дает вам то, что вам нужно быстро. Это функция Premium.
Поскольку в MSTest все еще отсутствуют функции (даже удаленные функции с vs2010), я бы по-прежнему рекомендовал использовать NUnit для модульных тестов. Преимущества включают в себя тестовую группировку по пространству имен, возможность добавления аннотаций к тестовым сценариям (выполнение одного и того же теста несколько раз с разными параметрами), и оно хорошо работает с Opencover и генератором отчетов для анализа покрытия. Основной цитированный аргумент состоит в том, что он не интегрирован как MSTest, поэтому он действительно зависит от того, насколько важно для вас, является ли это con.
Ответ 2
@Biranchi: теперь не важно, какую фреймворк unit test вы используете в Visual Studio 2012 (и вверх). Смотрите мой блогпост здесь, продолжение к тому, к которому вы обращаетесь. http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/20/part-2-using-traits-with-different-test-frameworks-in-the-unit-test-explorer.aspx
Вы можете даже смешивать и сопоставлять тесты из разных фреймворков, вы даже можете сделать это до уровня метода!
Это означает, что вы даже можете переместить устаревший код из одного в другой без каких-либо неблагоприятных побочных эффектов.
Также см. это, как использовать Nuget для установки адаптера NUnit в решение, освободив разработчика для его установки.
http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/11/part-3-unit-testing-with-traits-and-code-coverage-in-visual-studio-2012-using-the-tfs-build-and-the-new-nuget-adapter-approach.aspx
@Sriwantha: MSTest - это более простая структура, чем NUnit. NUnit (а также XUnit) дают вам больше гибкости, что также приводит к уменьшению количества кода для записи. Один пример: если вы используете категории (и вы должны), MSTest требует, чтобы категория украшала каждый метод. NUnit позволяет вам декорировать класс, который вступает в силу для всех методов этого класса. NUnit также позволяет использовать строго типизированные категории
public class Integration : Category {}
Этого достаточно, чтобы объявить категорию, которую вы можете использовать вместо
Category("Integration");
где вы рискуете орфографическими ошибками.
NUnit имеет гораздо лучшую поддержку тестов, управляемых данными.
NUnit также поддерживает теории
чтобы назвать несколько.
Ответ 3
VS2012 позволяет классифицировать тесты на группы, если у вас есть "Обновление 1" или позже:
http://msdn.microsoft.com/en-us/library/hh270865.aspx#BKMK_Grouping_and_filtering_the_test_list
Ответ 4
Посмотрели ли вы на функциональность "Черты" VS?
http://blogs.msdn.com/b/visualstudioalm/archive/2012/11/09/how-to-manage-unit-tests-in-visual-studio-2012-update-1-part-1-using-traits-in-the-unit-test-explorer.aspx
Группировка намного лучше в mstest (обновление 2012 года 1) по сравнению с nunit.
Ответ 5
Еще одна вещь, чтобы добавить сюда. Похоже, что движок MSTEST не работает с TFS Build в определенных сценариях. Если вы используете сборку TFS, она не сообщит пропущенные тесты (отмеченные атрибутом Ignore). Он будет включать только Assert.Inconclusive. Если это проблема, вы должны использовать NUnit вместо MSTest.