2008-11-04 4 views
337

Существует немало инфраструктур unittesting для .NET. Я нашел это небольшое сравнение возможностей: http://xunit.github.io/docs/comparisons.htmlNUnit vs. MbUnit vs. MSTest vs. xUnit.net

Теперь я должен выбрать лучший для нас. Но как? Это имеет значение? Какой из них является самым перспективным доказательством и имеет приличный импульс позади него? Должен ли я заботиться об особенностях? Хотя xUnit, по-видимому, является самым современным и специально разработанным для .NET, NUnit снова, похоже, является широко распространенным. MSTest снова уже интегрирован в Visual Studio ...

+10

Эта сравнительная таблица - годы устаревания. Например, NUnit также имеет Assert.Throws и т. Д., И все в таблице Assertions - это старый API. Новый синтаксис Assert.That (..., Is ....) - это гораздо приятнее, и он уже давно работает. – 2011-05-18 11:11:05

+11

Знаете ли вы, какая таблица более актуальна? – bitbonk 2011-05-18 13:49:13

+1

В конце 2013 года перешел из xUnit.net => NUnit. Также обратите внимание, что xUnit.NET (проект)! = XUnit (категория, членом которой является NUnit) – DeepSpace101 2013-10-30 23:38:51

ответ

172

Я знаю, что это старая тема, но я думал, что опубликую голосование за xUnit.NET. В то время как большинство других тестовых фреймворков упомянуты, практически все то же самое, xUnit.NET взяла довольно уникальный, современный и гибкий подход к модульному тестированию. Это изменяет терминологию, поэтому вы больше не определяете TestFixtures и Tests ... вы указываете факты и теории о своем коде, который лучше интегрируется с концепцией того, что такое тест с точки зрения TDD/BDD.

xUnit.NET также Чрезвычайно расширяемый.Его классы атрибутов ActAttribute и TraitAttribute не запечатываются и предоставляют передислоцированные базовые методы, которые дают вам большой контроль над тем, как должны выполняться методы, которыми эти атрибуты украшают. В то время как xUnit.NET в своей форме по умолчанию позволяет вам создавать тестовые классы, похожие на тестовые приборы NUnit, с их тестовыми методами, вы не ограничены этой формой модульного тестирования вообще. Вы можете расширить рамки для поддержки спецификаций Concern/Context/Observation в стиле BDD, как показано на рисунке here.

xUnit.NET также поддерживает тестирование в стиле fit непосредственно из коробки с атрибутом Theory и соответствующими атрибутами данных. Подходящие входные данные могут быть загружены из excel, базы данных или даже из настраиваемого источника данных, такого как документ Word (путем расширения базового атрибута данных). Это позволяет использовать одну тестовую платформу для модульных тестов и тестов интеграции, которые может быть огромным в сокращении зависимостей продуктов и необходимости обучения.

Другие подходы к тестированию также могут быть реализованы с помощью xUnit.NET ... возможности довольно безграничны. В сочетании с другой очень перспективной издевательской структурой, Moq, две создают очень гибкую, расширяемую и мощную платформу для внедрения автоматизированного тестирования.

122

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

Мне лично все равно, о модульных тестовых фреймах, насмешливые библиотеки IMHO гораздо важнее (и блокируют вас гораздо больше). Просто выберите один и придерживайтесь его.

+3

Какая ваша топ-макетная коллекция? – dplante 2009-06-05 20:32:44

6

Это не имеет большого значения, довольно легко переключаться между ними. MSTest, будучи интегрированным, также не имеет большого значения, просто возьмите testdriven.net.

Как и предыдущий человек, выберите издевательский каркас, моим фаворитом на данный момент является Moq.

100

Я бы не пошел с MSTest. Хотя это, вероятно, самое будущее доказательство того, что рамки с Microsoft позади, это не самое гибкое решение. Он не будет работать автономно без каких-либо хаков. Поэтому запустить его на сервере сборки, отличном от TFS, без установки Visual Studio сложно. Тест-студия визуальной студии на самом деле медленнее, чем Testdriven.Net + любой из других фреймворков. И поскольку выпуски этой структуры связаны с релизами Visual Studio, количество обновлений меньше, и если вам нужно работать со старым VS, вы привязаны к более старому MSTest.

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

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

7

Это не большое дело в небольшом/личном масштабе, но оно может стать крупным сделкой быстро в большем масштабе. Мой работодатель - большой магазин Microsoft, но не может/не может купить его в Team System/TFS по ряду причин. В настоящее время мы используем Subversion + Orcas + MBUnit + TestDriven.NET, и он работает хорошо, но получение TD.NET было огромной проблемой. Чувствительность к версии MBUnit + TestDriven.NET также является большой проблемой, и наличие одной дополнительной коммерческой вещи (TD.NET) для юридической проверки и закупок для обработки и управления не является тривиальным. Моя компания, как и многие компании, толста и довольна моделью подписки MSDN, и она просто не используется для обработки одной закупочной документации для сотен разработчиков. Другими словами, полностью интегрированное предложение MS, в то время как определенно не всегда лучшее из хлеба, является значительным добавлением на мой взгляд.

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

5

Nunit не работает хорошо с проектами в смешанном режиме в C++, так что я должен был бросить его

18

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

Например, я использую xUnit с MSTest. Добавьте ссылку на сборку xUnit.dll и просто сделайте что-нибудь подобное. Удивительно, это просто работает!

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using Assert = Xunit.Assert; // <-- Aliasing the Xunit namespace is key 

namespace TestSample 
{ 
    [TestClass] 
    public class XunitTestIntegrationSample 
    { 
     [TestMethod] 
     public void TrueTest() 
     { 
      Assert.True(true); // <-- this is the Xunit.Assert class 
     } 

     [TestMethod] 
     public void FalseTest() 
     { 
      Assert.False(true); 
     } 
    } 
} 
Смежные вопросы