NUnit проти xUnit


110

Які відмінності між NUnit та xUnit.net ? Який сенс розвивати два з них, а не тільки один?

Я читав, що xUnit розробляється винахідником NUnit:

xUnit.net - це інструмент модульного тестування для .NET Framework. Написано первинним винахідником NUnit

З іншої сторони:

NUnit - це модульна система тестування для всіх мов .Net. Поточний виробничий випуск, версія 2.6, є сьомим основним випуском цього інструменту модульного тестування на базі xUnit

То де правда?


3
Як зазначав @Joey, це не є дублікатом пов'язаного питання. У цьому випадку ОП щось принципово неправильно зрозумів; а саме різниця між xUnit.net - інструментом модульного тестування та x Unit - узагальненим терміном для класу модульних модулів тестування (nUnit, jUnit тощо). Голосування за повторне відкриття.
Роб Левін

Відповіді:


131

На момент написання цієї відповіді остання версія 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, ти маєш рацію, він не буде паралельно запускати методи одного класу.
допрацьований

1
Я не впевнений, як ви дізналися, що xUnit "добре задокументований", як це явно ні. Вся інформація повинна бути знайдена через джерела спільноти та запитання щодо stackoverflow замість хорошої документації, як це робить NUnit. Я був по-справжньому в захваті від xUnit після вашої відповіді, але зрозумів, що NUnit, здається, чудово справляється і з .NET Core.
CularBytes

1
@Loaderon Я публікував це близько 4 років тому, і я використовую xunit з тих пір і дотепер. документація та спільнота набагато кращі, ніж раніше, і зараз це вже зріліше. тому використовуйте XUnit зі спокоєм, вам не потрібно буде повертатися до NUnit. :)
akazemis

33

Ви плутаєте назву одного інструменту ( xUnit.net ) з назвою цілого класу модульних модулів тестування ( xUnit , x, що відноситься до мови / середовища, наприклад, JUnit, NUnit, ...).


1
Шкода, що це закрили, оскільки це не прямий дублікат - ви маєте рацію - ОП заплутався між двома термінами, які майже однакові.
Роб Левін

Я трохи змінив заголовок, щоб переконатися, що не буде плутанини.
Руслан

1
Я пішов не за назвою, а саме із виділеними сегментами цитат у вашому питанні. Але, можливо, я вас неправильно зрозумів.
Джої,

8

Плюси xUnit:

xUnit слідує новій концепції, уникаючи старих методів "SetUp" та "TearDown". Це змушує нас використовувати IDisposable та конструктор, як це слід робити як розробники .NET. Також xUnit має чітку концепцію обміну контекстом.

xUnit мінуси:

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


1
Що таке "тестовий контекст" ? Чи реалізовано це дотепер?
Пітер Мортенсен

8

Однією з переваг xUnit є те, що він знаходить тести в різних класах; вона запускає їх паралельно . Це може заощадити багато часу, якщо у вас багато тестів.

Звичайно, ви можете це вимкнути або контролювати його роботу (кількість потоків, потоків на клас, тести на збірку тощо).

Ознайомтесь із цим зразком рішення за допомогою двох тестових проектів, один із яких використовує xUnit, інший - NUnit .

Детальніше про паралельні тести в xUnit ви можете прочитати тут .


Чи існує у xunit інші способи паралельного запуску тестів в одному класі?
Магеш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.