Проекты NUnit vs Visual Studio 2008 для тестирования модhive?

Я собираюсь начать новый проект на работе и хочу пройти модульное тестирование. Мы будем использовать VS 2008, C # и материал ASP.NET MVC. Я рассматриваю использование NUnit или встроенных тестовых проектов, которые VS2008 имеет, но я открыт для исследования других предложений. Является ли одна система лучше, чем другая, или, возможно, проще в использовании / понимании, чем в другой? Я ищу, чтобы этот проект был создан как «лучшая практика» для наших усилий в области развития в будущем.

Спасибо за любую помощь и предложения!

Даок назвал все про-проекты VS2008 тестовыми проектами, вот про NUnit.

  • NUnit имеет насмешливую структуру.
  • NUnit можно запустить за пределами среды IDE, это может быть полезно, если вы хотите запускать тесты на сервере сборки без MS, например, CC.Net
  • NUnit имеет больше версий, чем визуальная студия. Вам не нужно ждать лет для новой версии. И вам не нужно устанавливать новую версию IDE для получения новых функций.
  • Существуют расширения для NUnit, такие как тесты строк и т. Д.
  • По какой-то причине тесты Visual Studio занимают много времени. Это лучше в 2008 году, но все еще слишком медленно для моего вкуса. Быстрое выполнение теста, чтобы убедиться, что вы не сломаете что-то, может занять слишком много времени. NUnit с чем-то вроде Testdriven.Net для запуска тестов из IDE на самом деле намного быстрее. особенно при выполнении отдельных тестов.
    В дополнение к Kjetil Klaussen это вызвано тестировщиком Visual Studio, запуск тестов MSTest в TestDriven.Net делает производительность MSTest сравнимой с NUnit.

Рамка модульного тестирования на самом деле не имеет большого значения, поскольку вы можете конвертировать тестовые classы с отдельными файлами проекта и условной компиляцией (например, VS-> NUnit):

  #if! NUNIT
   используя Microsoft.VisualStudio.TestTools.UnitTesting;
  #else
   используя NUnit.Framework;
   используя TestClass = NUnit.Framework.TestFixtureAttribute;
   используя TestMethod = NUnit.Framework.TestAttribute;
   используя TestInitialize = NUnit.Framework.SetUpAttribute;
   используя TestCleanup = NUnit.Framework.TearDownAttribute;
   используя TestContext = System.String;
   используя DeploymentItem = NUnit.Framework.DescriptionAttribute;
  #endif

Плагин TestDriven.Net хорош и не очень дорог … С помощью простого VS2008 вам нужно найти тест из вашего тестового classа или тестового списка. С помощью TestDriven.Net вы можете запустить свой тест непосредственно из classа, который вы тестируете. В конце концов, модульный тест должен быть прост в обслуживании и рядом с разработчиком.

Преимущества / изменения VS2008 Встроенная модульная система тестирования

  1. Версия 2008 теперь доступна в профессиональных изданиях (до того, как ей потребовались дорогие версии VS, это только для тестирования модhive разработчиков), что оставило много разработчиков с единственным выбором открытых / внешних систем тестирования.
  2. Встроенный API, поддерживаемый отдельной компанией.
  3. Используйте те же инструменты для запуска и создания тестов (их можно запустить с помощью командной строки MSTest)
  4. Простой дизайн (без макетов, но это отличная отправная точка для многих программистов)
  5. Долгосрочная поддержка (я все еще помню, что случилось с nDoc, я не хочу фиксировать frameworks тестирования, которые могут не поддерживаться через 5 лет, но я все еще считаю nUnit отличной структурой.)
  6. Если вы используете сервер создания групп в качестве своего бэкэнд, вы можете легко создать рабочие элементы или ошибки с неудавшимися тестовыми данными.

Я использую NUnit в течение 2 лет. Все в порядке, но я должен сказать, что система Unit в VS довольно хороша, потому что она находится внутри Gui и может более легко выполнить тест для частной функции, без необходимости возиться. Кроме того, Unit Testing VS позволяет вам делать покрытие и другие вещи, которые NUnit не может сделать.

Одно небольшое раздражение инфраструктуры тестирования Visual Studio заключается в том, что она создаст множество файлов тестовых прогонов, которые, как правило, загромождают каталог проекта, хотя это не так уж и важно.

Кроме того, если вам не хватает плагина, такого как TestDriven.NET, вы не можете отлаживать модульные тесты NUnit (или MbUnit, xUnit и т. Д.) В среде Visual Studio, как вы можете, используя встроенную среду тестирования Microsoft VS.

Немного не по теме, но если вы поедете с NUnit, я могу порекомендовать использовать ReSharper – он добавляет некоторые кнопки в пользовательский интерфейс VS, что упрощает запуск и отладки тестов из среды IDE.

Этот обзор немного устарел, но объясняет это более подробно:

http://codebetter.com/blogs/paul.laudeman/archive/2006/08/15/Using-ReSharper-as-an-essential-part-of-your-TDD-toolkit.aspx

XUnit – еще одна возможность для нового проекта. У этого есть, возможно, более интуитивный синтаксис, но на самом деле он не совместим с другими фреймворками.

http://www.codeplex.com/xunit

Моя основная говядина с VS-модульными испытаниями над NUnit – это создание теста VS, как правило, приводит к созданию сгенерированного кода для доступа к частному члену.

Некоторые могут захотеть проверить свои частные методы, а некоторые – нет, это другая тема.

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

Я сделал несколько TDD, используя оба и (возможно, я немного тупой). NUnit кажется намного быстрее и проще использовать для меня. И когда я говорю много, я имею в виду много.

В MS Test слишком много атрибутов, везде – код, который выполняет реальные тесты, – это крошечные строки, которые вы можете прочитать здесь и там. Большой беспорядок. В nUnit код, выполняющий тест, просто доминирует над атрибутами, как и должно быть.

Кроме того, в nUnit вам нужно просто щелкнуть те тесты, которые вы хотите запустить (только один – все тесты, охватывающие class? Сборка – решение?). Один клик. И окно ясное и большое. Вы получаете ясные зеленые и красные огни. Вы действительно знаете, что происходит с одного взгляда.

В VSTS список тестов застрял в нижней части экрана, он маленький и уродливый. Вы должны посмотреть дважды, чтобы узнать, что произошло. И вы не можете запустить только один тест (ну, я еще не узнал!).

Но я, возможно, ошибаюсь, я просто читал около 21 сообщения в блоге о «Как сделать простой TDD с помощью VSTS». Я должен был прочитать больше, ты прав.

Для nUnit я прочитал один. И я был TDDing в тот же день. С удовольствием.

Кстати, я обычно люблю продукты Microsoft. Visual Studio – действительно лучший инструмент, который разработчик может купить – но управление TDD и Work Item в Visual Studio Team System на самом деле отстой.

Всего наилучшего. Sylvain.

Я получил сообщения о том, что «файловая структура NUnit богаче VSTest» … Конечно, если вы предпочитаете структуру файлов NUnit, вы можете использовать это решение по-другому, например (NUnit-> VS):

#if !MSTEST using NUnit.Framework; #else using Microsoft.VisualStudio.TestTools.UnitTesting; using TestFixture = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute; using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute; using SetUp = Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute; using TearDown = Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute; #endif 

Или любое другое преобразование … 🙂 Это использование здесь просто псевдонима для компилятора.

Сначала я хочу исправить неправильный оператор: вы можете запустить msTest за пределами визуальной студии с помощью командной строки. Хотя некоторые инструменты CI, такие как TeamCity, имеют лучшую поддержку NUnit (возможно, это изменится, поскольку msTest станет более популярным). В моем текущем проекте мы используем оба варианта, и мы обнаружили, что mstest всегда работает как 32-разрядный, а NUnit работает либо как 32-битный, либо 64-битный тест, который имеет значение только в том случае, если ваш код использует собственный код, зависящий от 32/64.

Я начал с MSTest, но переключился по одной простой причине. MSTest не поддерживает наследование методов тестирования из других сборок.

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

NUnit делает все, что мне нужно. Единственное, что отсутствует в NUnit, – это приложение Visual Studio Addin, которое может отображать состояние Red / Green (как VSTS) каждого теста.

.NET Testing Framework Advice и .NET Unit Тестирование пакетов? ,

Если вы рассматриваете MSTest или nUnit, я рекомендую вам посмотреть mbUnit. Мои причины

  1. Совместимость TestDriven.Net. Ничто не сравнится с TestDriven.Net.ReRunWithDebugger, связанным с комбинацией клавиш.
  2. Рамка Галлио. Gallio – испытательный бегун, как nUnits. Единственное различие заключается в том, что вам не нужно писать свои тесты в nUnit, msTest, xUnit или mbUnit. Они все бегут.
  3. Совместимость с nUnit. Все функции nUnit поддерживаются mbUnit. Я думаю, вам даже не нужно менять свои атрибуты (нужно будет это проверить), просто ваша ссылка и использование.
  4. Коллекция утверждает. mbUnit имеет больше случаев Assert, включая class CollectionAssert. В основном вам больше не нужно писать собственные тесты, чтобы узнать, одинаковы ли 2 коллекции.
  5. Комбинаторные тесты. Было бы здорово, если бы вы могли предоставить два набора данных и получить тест для всех комбинаций данных. Он находится в mbUnit.

Я изначально выбрал mbUnit из-за его функциональности [RowTest ….], и я не нашел единственной причины вернуться. Я переместил все свои активные тестовые сюиты из nUnit и никогда не оглядывался назад. С тех пор я превратил две разные группы разработчиков в преимущества.

Насколько мне известно, в эти дни для модульного тестирования с .NET есть четыре frameworks

  • NUnit
  • MbUnit
  • MSTest
  • XUnit

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

Если вы только начинаете с модульного тестирования, это, вероятно, не имеет большого значения. Как только вы достигнете скорости, вы сможете лучше понять, какая структура лучше всего подходит для ваших нужд.

Мне не нравится встроенная среда тестирования VS, потому что это заставляет вас создавать отдельный проект, а не тестировать его как часть проекта, который вы тестируете.

MSTest по существу NUnit немного переработан, с несколькими новыми функциями (такими как assembly и отрыв, а не только крепление и уровень теста) и отсутствие некоторых из лучших битов (например, синтаксис синтаксиса 2.4). NUnit более зрелый, и его больше поддерживают другие производители; и, конечно, поскольку он всегда был бесплатным (в то время как MSTest только попал в профессиональную версию 2008 года, до этого он стал более дорогим SKU), большинство проектов ALT.NET используют его.

Сказав это, есть некоторые компании, которые невероятно неохотно используют что-то, у которого на нем нет ярлыка Microsoft, и особенно для этого кода OSS. Таким образом, наличие официальной тестовой среды MS может быть мотивом того, что эти компании должны пройти тестирование; и, честно говоря, это важно для тестирования, а не того инструмента, который вы используете (и используя вышеописанный код Туомаса Хиетанана , вы можете почти заменить свою тестовую структуру взаимозаменяемыми).

С выпуском в .NET 4.0 системы « Кодовые контракты» и наличием статического контролера вам необходимо теоретически написать меньше тестовых примеров, и такой инструмент, как Pex , поможет идентифицировать эти случаи. Относясь к обсуждению, если вам нужно делать меньше с вашими модульными тестами, потому что ваши контракты покрывают ваш хвост, то почему бы просто не пойти дальше и не использовать встроенные части, поскольку это одна меньшая зависимость для управления. В эти дни я все о простоте. 🙂

Смотрите также:

  • Microsoft Pex – автоматическое тестирование модhive
  • Создание модульных тестов с помощью Pex с использованием Visual Studio 2010 и C # 4.0

Я бы предпочел использовать небольшую тестовую среду MS, но теперь я придерживаюсь NUnit. Проблемы с MS, как правило (для меня)

  • Общий файл «тестов» (бессмысленный), который должен поддерживаться
  • Списки тестов вызывают конфликты с несколькими разработчиками / VCS
  • Плохой интегрированный интерфейс – запутанная настройка, обременительный выбор теста
  • Нет хорошего внешнего бегуна

Предостережения. Если бы я тестировал сайт aspx, я бы определенно использовал MS. Если бы я разрабатывал соло, также MS было бы хорошо. Если бы у меня было ограниченное умение и я не мог настроить NUnit 🙂

Мне гораздо проще просто написать мои тесты и запустить NUnitGUI или один из других интерфейсов (testDriven далеко далеко далеко переоценен). Настройка отладки с версией командной строки также довольно проста.

  • Как принудительно использовать компилятор C ++ для использования конкретной версии CRT?
  • Каков «правильный» способ принести приложение Windows Forms на передний план?
  • Этот тип проекта не поддерживается этой установкой
  • app.config для библиотеки classов
  • Вызов функций в DLL из C ++
  • Изменить и продолжить: «Изменения не допускаются, когда ...»
  • Не останавливайте отладчик в этом исключении, когда его бросают и поймают
  • Добавить библиотеку в Visual Studio 2008 C ++ Project
  • Проект установки VS2008: общие (для всех пользователей) файлы данных приложения?
  • Могу ли я использовать бета-версию .NET 4.0 в Visual Studio 2008?
  • Как запустить NUnit в режиме отладки из Visual Studio?
  • Interesting Posts

    setValue: forUndefinedKey: этот class не является ключевым значением, совместимым с кодировкой для ключа

    Горизонтальная прокрутка RecyclerView в центре

    Проверить подстроку существует в строке в C

    Инъекция зависимостей через конструкторы или средства определения свойств?

    Программа для закладки длинных видео на моем локальном жестком диске?

    Что означает символ M в десятичной литературе C #?

    .NET. Определите тип этого «classа» в статическом методе

    Выберите первый результат с помощью JPA

    Как добавить префикс перед всеми элементами данных, которые находятся в столбце B?

    Как использовать ntpdate за прокси-сервером?

    Обработка исключительных ситуаций ASP.NET Core Web API

    Android Spinner: Получить выбранное событие изменения элемента

    Установите переменные среды из командной строки и сделайте их палкой по всему миру

    Как развернуть военный файл в Tomcat 7

    Как я могу иметь другой текст в нижнем колонтитуле на каждой странице документа Word?

    Давайте будем гением компьютера.