NUnit ve xUnit


115

NUnit ve xUnit.net arasındaki farklar nelerdir ? Sadece birini değil, ikisini geliştirmenin ne anlamı var?

XUnit'in NUnit'in mucidi tarafından geliştirildiğini okudum:

xUnit.net, .NET Framework için bir birim test aracıdır. NUnit'in orijinal mucidi tarafından yazıldı.

Diğer yandan:

NUnit, tüm .Net dilleri için bir birim testi çerçevesidir .. mevcut üretim sürümü olan sürüm 2.6, bu xUnit tabanlı birim test aracının yedinci büyük sürümüdür

Öyleyse gerçek nerede?


4
@ Joey'in belirttiği gibi - bu, bağlantılı sorunun doğrudan bir kopyası değil. Bu durumda, OP temelde bir şeyi yanlış anlamıştır; yani xUnit.net - birim test aracı ve x Unit - birim test çerçeveleri sınıfı için genelleştirilmiş terim (nUnit, jUnit, vb.) arasındaki fark. Yeniden açılması için oylama.
Rob Levine

Yanıtlar:


140

Bu cevabı yazarken en son NUnit sürümü v3.5 ve xUnit.net v2.1'dir.

Her iki çerçeve de harika ve ikisi de paralel test çalışmasını destekliyor (farklı bir şekilde olsa da). NUnit 2002'den beri piyasada , yaygın olarak kullanılıyor, iyi belgelenmiş ve geniş bir topluluğa sahipken, xUnit.net daha modern, daha TDD uyumlu, daha genişletilebilir ve ayrıca .NET Core geliştirmede trend oluyor. Aynı zamanda iyi belgelenmiştir.

Buna ek olarak, fark ettiğim temel fark, xUnit.net'in test yöntemlerini çalıştırma biçimi. Yani, NUnit'te bir test sınıfımız ve içinde bir dizi test yöntemimiz var. NUnit, test sınıfının yeni bir örneğini oluşturur ve ardından tüm test yöntemini aynı örnekten çalıştırır. Oysa xUnit.net, test yöntemlerinin her biri için test sınıfının yeni bir örneğini oluşturur. . Bu nedenle, test yöntemlerimiz arasında veri paylaşmak için alanlar veya özellikler kullanılamaz, bu kötü bir uygulamadır, çünkü test yöntemlerimiz TDD'de kabul edilemez olan birbirine bağımlı olacaktır. Dolayısıyla, xunit.net kullanırsanız, test yöntemlerinin tamamen izole edildiğinden emin olabilirsiniz.

Yine de test yöntemleriniz arasında bazı verileri paylaşmaya istekliyseniz, xUnit bunu yapmanıza izin verecektir. Bu nedenle, varsayılan olarak tüm test yöntemleri tamamen yalıtılmıştır, ancak bu yalıtımı belirli durumlarda kasıtlı olarak kırabilirsiniz. Bu tavrı seviyorum, bu yüzden daha çok seviyorum.


5
Daha fazla ayrıntı için en son gönderimi kontrol edin: codopia.wordpress.com/2017/02/20/…
akazemis

2
Paralel yürütme hakkında yazdıklarınız doğru değil. Belki gönderdiğiniz zaman öyleydi ama şimdi değil. Bu xunit.net/docs/running-tests-in-parallel'e bakın . Bir sınıftaki test yöntemlerinin asla paralel çalışmayacağını söylüyor.
Gondil

Teşekkürler @ Gondil, haklısın, tek bir sınıfın yöntemlerini paralel olarak çalıştırmayacak. paralellik biti ayarlandı
akazemis

2
Açıkça olmadığı için xUnit'in "iyi belgelendiğini" nasıl öğrendiğinizden emin değilim. Tüm bilgiler, NUnit'in yaptığı gibi iyi belgeler yerine topluluk kaynakları ve yığın aşımı soruları aracılığıyla bulunmalıdır. Cevabınızdan sonra xUnit için gerçekten heyecanlandım, ancak NUnit'in .NET Core'da da iyi durumda olduğunu düşündüm.
CularBytes

1
@Loaderon Bunu yaklaşık 4 yıl önce göndermiştim ve o zamandan beri xunit kullanıyorum. dokümantasyon ve topluluk eskisinden çok daha iyi ve şimdi daha olgun. bu nedenle XUnit'i gönül rahatlığıyla kullanın, NUnit'e geri dönmeniz gerekmeyecek. :)
akazemis

34

Tek bir aracın ( xUnit.net ) adını, birim test çerçevelerinin ( xUnit , bir dile / ortama atıfta bulunan x , örneğin JUnit, NUnit, ...) adıyla karıştırıyorsunuz .


2
Yazık ki, bu düz bir kopya olmadığı için - haklısınız - OP neredeyse aynı olan iki terim arasında karıştı.
Rob Levine

Karışıklık olmayacağından emin olmak için başlığı biraz değiştirdim.
Ruslan

1
Başlığa değil, sorunuzdaki alıntıların vurgulanan bölümlerine göre gittim. Ama belki seni yanlış anladım.
Joey

9

xUnit Artıları:

xUnit, eski "SetUp" ve "TearDown" yöntemlerinden kaçınarak yeni bir konsept izler. Bizi IDisposable ve .NET geliştiricileri olarak yapmamız gerektiği gibi bir yapıcı kullanmaya zorlar. Ayrıca xUnit, açık bir bağlam paylaşma konseptine sahiptir.

xUnit Eksileri:

Test bağlamını almak için kullanılabilirlik henüz uygulanmadı.


1
Nedir "test bağlam" ? Şimdiye kadar uygulandı mı?
Peter Mortensen

test bağlamı bize mevcut test hakkında bilgi verir (örneğin testin adı). Bildiğim kadarıyla muhtemelen henüz uygulanmadı :(.
Shoter

8

XUnit'in bir yararı, farklı sınıflarda testler bulmasıdır; onları paralel olarak çalıştırır . Çok sayıda test durumunuz varsa, bu size çok zaman kazandırabilir.

Elbette bunu kapatabilir veya çalışmasını kontrol edebilirsiniz (iş parçacığı sayısı, sınıf başına iş parçacığı, montaj başına testler, vb.)

Biri xUnit ve diğer NUnit kullanan iki test projesiyle bu örnek çözüme göz atın .

XUnit'te paralel testler hakkında daha fazla bilgiyi burada bulabilirsiniz .


Xunit'in aynı sınıfta paralel çalışacak başka testler yapabileceği var mı?
Magesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.