Visual Studio 2012 MSTest против NUnit за и против - программирование
Подтвердить что ты не робот

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. Просьба предоставить объективное сравнение с подробными техническими проблемами, с которыми вы столкнулись в обеих технологиях (только новые версии)

4b9b3361

Ответ 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 также поддерживает теории

чтобы назвать несколько.

Ответ 5

Еще одна вещь, чтобы добавить сюда. Похоже, что движок MSTEST не работает с TFS Build в определенных сценариях. Если вы используете сборку TFS, она не сообщит пропущенные тесты (отмеченные атрибутом Ignore). Он будет включать только Assert.Inconclusive. Если это проблема, вы должны использовать NUnit вместо MSTest.