NUnit vs. xUnit

111

Apa perbedaan antara NUnit dan xUnit.net ? Apa gunanya mengembangkan dua, bukan hanya satu?

Saya telah membaca bahwa xUnit sedang dikembangkan oleh penemu NUnit:

xUnit.net adalah alat pengujian unit untuk .NET Framework. Ditulis oleh penemu asli NUnit

Di samping itu:

NUnit adalah kerangka pengujian unit untuk semua bahasa .Net .. rilis produksi saat ini, versi 2.6, adalah rilis utama ketujuh dari alat pengujian unit berbasis xUnit ini

Jadi dimana kebenarannya?

Ruslan
sumber
3
Seperti yang ditunjukkan @Joey - ini bukan duplikat langsung dari pertanyaan terkait. Dalam hal ini, OP pada dasarnya telah salah memahami sesuatu; yaitu perbedaan antara xUnit.net - alat pengujian unit dan x Unit - istilah umum untuk kelas kerangka pengujian unit (nUnit, jUnit, dll.). Memberi suara untuk membuka kembali.
Rob Levine

Jawaban:

133

Pada saat menulis jawaban ini, versi NUnit terbaru adalah v3.5 dan xUnit.net adalah v2.1.

Kedua kerangka kerja itu mengagumkan, dan keduanya mendukung pengujian paralel yang berjalan (meskipun dengan cara yang berbeda). NUnit telah ada sejak 2002, ini banyak digunakan, didokumentasikan dengan baik dan memiliki komunitas yang besar, sedangkan xUnit.net lebih modern, lebih patuh pada TDD, lebih dapat diperluas, dan juga tren dalam pengembangan .NET Core. Itu juga didokumentasikan dengan baik.

Selain itu, perbedaan utama yang saya perhatikan adalah cara xUnit.net menjalankan metode pengujian. Jadi, di NUnit , kami memiliki kelas pengujian dan satu set metode pengujian di dalamnya. NUnit membuat instance baru dari kelas pengujian dan kemudian menjalankan semua metode pengujian dari instance yang sama. Sedangkan xUnit.net membuat instance baru dari kelas pengujian untuk setiap metode pengujian. . Oleh karena itu, seseorang tidak dapat menggunakan bidang atau properti untuk berbagi data di antara metode pengujian yang merupakan praktik yang buruk, karena metode pengujian kami akan bergantung satu sama lain yang tidak dapat diterima di TDD. Jadi jika Anda menggunakan xunit.net Anda dapat yakin bahwa metode pengujian Anda benar-benar terisolasi.

Jika Anda ingin membagikan beberapa data di antara metode pengujian Anda, xUnit akan membiarkan Anda melakukannya. Oleh karena itu, secara default semua metode pengujian diisolasi sepenuhnya, tetapi Anda dapat menghentikan isolasi ini dalam kasus tertentu dengan sengaja. Saya menyukai sikap ini, itulah mengapa saya lebih menyukainya.

akazemis
sumber
4
Untuk lebih jelasnya periksa posting terbaru saya: codopia.wordpress.com/2017/02/20/…
akazemis
2
Apa yang Anda tulis tentang eksekusi paralel tidak benar. Mungkin itu pada saat Anda memposting tetapi sekarang tidak. Periksa xunit.net/docs/running-tests-in-parallel ini . Dikatakan bahwa metode pengujian dalam satu kelas tidak akan pernah berjalan paralel.
Gondil
Terima kasih @Gondil, Anda benar, itu tidak akan menjalankan metode dari satu kelas secara paralel. mengubah sedikit paralelisme
akazemis
2
Saya tidak yakin bagaimana Anda mengetahui bahwa xUnit "didokumentasikan dengan baik", karena jelas tidak. Semua informasi harus ditemukan melalui sumber komunitas dan pertanyaan stackoverflow daripada dokumentasi yang baik seperti yang dilakukan NUnit. Saya sangat senang dengan xUnit setelah jawaban Anda, tetapi saya pikir NUnit tampaknya baik-baik saja di .NET Core juga.
CularBytes
1
@Loaderon Saya mempostingnya sekitar 4 tahun yang lalu dan saya telah menggunakan xunit sejak saat itu hingga sekarang. dokumentasi dan komunitas jauh lebih baik dari sebelumnya dan sekarang lebih matang. jadi gunakan XUnit dengan tenang, Anda tidak perlu kembali ke NUnit. :)
akazemis
33

Anda mengacaukan nama alat tunggal ( xUnit.net ) dengan nama seluruh kelas kerangka kerja pengujian unit ( xUnit , x merujuk ke bahasa / lingkungan, misalnya JUnit, NUnit, ...).

Joey
sumber
2
Sayang sekali ini ditutup, karena ini bukan duplikat langsung - Anda benar - OP bingung antara dua istilah yang hampir sama.
Rob Levine
Saya sedikit mengubah judulnya, untuk memastikan tidak ada kebingungan.
Ruslan
1
Saya tidak menggunakan judulnya, melainkan segmen kutipan yang disorot dalam pertanyaan Anda. Tapi mungkin saya salah paham.
Joey
9

xUnit Pro:

xUnit mengikuti konsep baru dengan menghindari metode "SetUp" dan "TearDown" yang lama. Ini memaksa kita untuk menggunakan IDisposable dan konstruktor seperti yang harus kita lakukan sebagai pengembang .NET. Juga xUnit memiliki konsep berbagi konteks yang jelas.

xUnit Cons:

Ketersediaan untuk mendapatkan konteks pengujian belum diterapkan.

TakinosaJi
sumber
1
Apa itu "konteks pengujian" ? Apakah sudah diterapkan sekarang?
Peter Mortensen
konteks tes akan memberi kita informasi tentang tes saat ini (misalnya nama tes). Dari apa yang saya ketahui, ini mungkin belum diterapkan :(.
Shoter
8

Satu keuntungan dari xUnit adalah menemukan tes di kelas yang berbeda; itu menjalankannya secara paralel . Ini dapat menghemat banyak waktu jika Anda memiliki banyak kasus pengujian.

Anda tentu saja dapat mematikan ini, atau mengontrol operasinya (jumlah utas, utas per kelas, tes per perakitan, dll.

Lihat contoh solusi ini dengan dua proyek uji, satu menggunakan xUnit, NUnit lainnya .

Anda dapat membaca lebih lanjut tentang pengujian paralel di xUnit di sini .

Rad
sumber
Apakah xunit memiliki cara lain untuk membuat pengujian di kelas yang sama berjalan secara paralel?
Magesh