NUnit против xUnit

111

В чем разница между NUnit и xUnit.net ? Какой смысл в разработке двух из них, а не одного?

Я читал, что xUnit разрабатывается изобретателем NUnit:

xUnit.net - это инструмент модульного тестирования для .NET Framework. Написано оригинальным изобретателем NUnit

С другой стороны:

NUnit - это среда модульного тестирования для всех языков .Net. Текущий производственный выпуск, версия 2.6, является седьмым основным выпуском этого инструмента модульного тестирования на основе xUnit.

Так где же правда?

Руслан
источник
3
Как отметил @Joey - это не прямая копия связанного вопроса. В этом случае ОП что-то в корне неправильно понял; а именно разница между xUnit.net - инструментом модульного тестирования и x Unit - обобщенным термином для класса фреймворков модульного тестирования (nUnit, jUnit и т. д.). Голосование за повторное открытие.
Роб Левин

Ответы:

133

На момент написания этого ответа последняя версия NUnit - v3.5, а xUnit.net - v2.1.

Обе платформы великолепны, и обе поддерживают параллельное выполнение тестов (хотя и по-разному). NUnit существует с 2002 года, он широко используется, хорошо документирован и имеет большое сообщество, тогда как xUnit.net является более современным, более приверженным TDD, более расширяемым и также имеет тенденцию в разработке .NET Core. Это также хорошо задокументировано.

В дополнение к этому, основное отличие, которое я заметил, заключается в том, как xUnit.net запускает методы тестирования. Итак, в NUnit у нас есть тестовый класс и набор тестовых методов в нем. NUnit создает новый экземпляр тестового класса, а затем запускает все методы тестирования из того же экземпляра. В то время как xUnit.net создает новый экземпляр тестового класса для каждого из тестовых методов. . Следовательно, нельзя использовать поля или свойства для обмена данными между методами тестирования, что является плохой практикой, поскольку наши методы тестирования будут зависеть друг от друга, что недопустимо в TDD. Поэтому, если вы используете xunit.net, вы можете быть уверены, что ваши методы тестирования полностью изолированы.

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

аказемис
источник
4
Подробнее см. Мой последний пост: codopia.wordpress.com/2017/02/20/…
akazemis
2
То, что вы пишете о параллельном выполнении, не соответствует действительности. Может быть, это было во время вашего поста, но сейчас это не так. Проверьте это xunit.net/docs/running-tests-in-parallel . В нем говорится, что методы тестирования в одном классе никогда не будут выполняться параллельно.
Gondil
Спасибо @Gondil, вы правы, он не будет запускать методы одного класса параллельно. подправили бит параллелизма
akazemis
2
Я не уверен, как вы узнали, что xUnit «хорошо документирован», поскольку это явно не так. Всю информацию нужно искать в источниках сообщества и в вопросах о стеке, а не в хорошей документации, как это делает NUnit. После вашего ответа я был по-настоящему взволнован xUnit, но решил, что NUnit, похоже, хорошо справляется и с .NET Core.
CularBytes,
1
@Loaderon Я опубликовал это около 4 лет назад, и с тех пор использую xunit. документация и сообщество стали лучше, чем раньше, и теперь они стали более зрелыми. так что используйте XUnit спокойно, вам не нужно будет откатываться к NUnit. :)
akazemis
33

Вы путаете название одного инструмента ( xUnit.net ) с названием целого класса фреймворков модульного тестирования ( xUnit , x относится к языку / среде, например, JUnit, NUnit, ...).

Джоуи
источник
2
Жаль, что это закрыто, так как это не прямая копия - вы правы - OP запутался между двумя терминами, которые почти одинаковы.
Роб Левин,
Немного изменил название, чтобы не было путаницы.
Руслан
1
Я использовал не заголовок, а выделенные сегменты цитат в вашем вопросе. Но может я вас неправильно понял.
Joey
9

xUnit Плюсы:

xUnit следует новой концепции, избегая старых методов «SetUp» и «TearDown». Это заставляет нас использовать IDisposable и конструктор так, как мы должны поступать как разработчики .NET. Также xUnit имеет четкую концепцию совместного использования контекста.

xUnit Минусы:

Доступность для получения тестового контекста пока не реализована.

ТакинозаДзи
источник
1
Что такое «тестовый контекст» ? Это уже реализовано?
Питер Мортенсен
контекст теста предоставит нам информацию о текущем тесте (например, название теста). Насколько мне известно, это, вероятно, еще не реализовано :(.
Shoter
8

Одним из преимуществ xUnit является то, что он находит тесты в разных классах; он запускает их параллельно . Это может сэкономить много времени, если у вас много тестовых примеров.

Вы, конечно, можете отключить это или контролировать его работу (количество потоков, потоков на класс, тестов на сборку и т. Д.

Ознакомьтесь с этим примером решения с двумя тестовыми проектами, в одном из которых используется xUnit, а в другом - NUnit .

Подробнее о параллельных тестах в xUnit можно прочитать здесь .

Рад
источник
Есть ли у xunit другие способы параллельного запуска тестов в одном классе?
Magesh