NUnit'e karşı MbUnit'e karşı MSTest'e karşı xUnit.net [kapalı]


390

.NET için oldukça fazla birim test çerçevesi var. Bu küçük özellik karşılaştırmasını buldum: http://xunit.github.io/docs/comparisons.html

Şimdi bizim için en iyisini seçeceğim. Ama nasıl? Önemli mi? Hangisi geleceğin en kanıtıdır ve arkasında iyi bir momentum vardır? Özellikleri önemsemeli miyim? XUnit en modern ve .NET için özel olarak tasarlanmış gibi görünse de, NUnit yine geniş çapta kabul gören biri gibi görünüyor. MSTest yine Visual Studio'ya entegre edildi ...


11
Bu karşılaştırma tablosu yıllarca güncel değil. Örneğin, NUnit'in Assert.Throws vb. Özellikleri vardır ve Assertions tablosundaki her şey eski API'dir. Yeni Assert.That (..., Is ....) akıcı sözdizimi çok daha hoş ve iyi bir süredir var.
Jim Cooper

11
Daha güncel olan herhangi bir masa biliyor musunuz?
bitbonk

1
2013 yılının sonlarında, xUnit.net => NUnit'ten taşındı. Ayrıca xUnit.NET (proje)! = XUnit (NUnit'in üyesi olduğu kategori)
DeepSpace101

3
@ XUnity.net => NUnit'ten neden taşındığınızı mı söylüyorsunuz?
Alexander Logger

2
Benzer soru sordu 2014 yılında Visual Studio 2013 MSTest vs NUnit
Michael Freidgeim

Yanıtlar:


197

Bu eski bir iş parçacığı olduğunu biliyorum, ama xUnit.NET için bir oy göndereceğini düşündüm . Bahsedilen diğer test çerçevelerinin çoğu hemen hemen aynı olsa da, xUnit.NET birim testine oldukça benzersiz, modern ve esnek bir yaklaşım benimsemiştir. Terminolojiyi değiştirir, böylece artık TestFixtures ve Testleri tanımlamazsınız ... kodunuz hakkında bir TDD / BDD perspektifinden bir testin ne olduğu ile daha iyi bütünleşen gerçekleri ve teorileri belirtirsiniz.

xUnit.NET ayrıca son derece genişletilebilir. FactAttribute ve TraitAttribute öznitelik sınıfları mühürlenmez ve bu özniteliklerin süslediği yöntemlerin nasıl yürütülmesi gerektiği konusunda size çok fazla denetim sağlayan geçersiz kılınabilen temel yöntemler sağlar. XUnit.NET varsayılan formunda, NUnit test fikstürlerine benzer test sınıflarını test yöntemleriyle yazmanıza izin verirken, bu birim test formuyla sınırlı değilsiniz. BDD tarzı Endişe / Bağlam / Gözlem spesifikasyonlarını destekleyecek çerçeveyi burada gösterildiği gibi genişletmekte özgürsünüz .

xUnit.NET ayrıca Teori özniteliği ve karşılık gelen veri öznitelikleriyle kutudan çıkar çıkmaz doğrudan test özelliğini de destekler. Uygun giriş verileri excel, veritabanı veya Word belgesi gibi özel bir veri kaynağından (temel veri özniteliğini genişleterek) yüklenebilir. Bu, hem birim testleri hem de entegrasyon testleri için tek bir test platformundan yararlanmanıza olanak tanır. ürün bağımlılıklarını ve gerekli eğitimi azaltmada büyük olabilir.

Test için diğer yaklaşımlar xUnit.NET ile de uygulanabilir ... olasılıklar oldukça sınırsızdır. Çok ileriye dönük başka bir alaycı çerçeve olan Moq ile birleştirilen bu ikisi, otomatik test uygulamak için çok esnek, genişletilebilir ve güçlü bir platform oluşturur.


35
Bu bir yıl önce doğru olsa da, NUnit o zamandan beri söz konusu özelliklerin çoğunu ekledi. NUnit'te testleri her iki şekilde de yazabilirsiniz.
Mark Levison

8
Hangi niteliklerin mevcut olduğu hakkında değil, nasıl kullanılabileceği hakkında. xUnit.NET sıfırdan, sizi herhangi bir özel test yöntemine kilitlemeyen ve en son yetenekleri elde etmek için temel çerçeveyi düzenli olarak güncellemenizi gerektirmeyen oldukça esnek ve genişletilebilir bir çerçeve olacak şekilde tasarlanmıştır.
jrista

9
1. Nitelikler üzerindeki çok farklı isimler fazla bir şey ifade etmeyecektir. 2. NUnit genişletilebilir ve genişletilebilir olmaya devam eder:? 3. testler için veri satırı parametreleri nunit'te desteklenir. Bir süre önce bir uzantıda desteklendiler :) 4. Nunit, Moq ile birlikte aynı şeyi yaratıyor. 5. BDD için, birçok birim test çerçevesiyle kolayca bütünleşen specflow diyebilirim.
graffic

8
XUnit'in sesini seviyorum, ancak zilch belgelerine sahip :(
Albay Panic

10
xUnit'in herhangi bir belgesi yok! Örneğin: TraitGerçekte ne yaptığını veya tek bir ebeveyn testi içinde farklı testleri gruplandırabiliyorsanız (örn. testsa içinde hepsi testfixture). nUnit, xUnit'in düz test görünümü yerine harika bir hiyerarşik görünüm oluşturur. Ayrıca isimlendirme hiçbir anlam ifade etmiyor - gerçekler ve teori? Gerçekçi ol! Bunlara daha iyi testler ve veriler denir.
DeepSpace101

134

NUnit muhtemelen üçüncü taraf araçlar tarafından en çok desteklenen araçtır. Ayrıca diğer üçten daha uzun sürdü.

Şahsen, birim test çerçevelerini umursamıyorum, alay kütüphaneleri IMHO'yu çok daha önemlidir (ve sizi daha çok kilitler). Sadece birini seç ve ona sadık kal.


3
en iyi sahte kütüphane seçiminiz nedir?
dplante

31
Ben Moq seviyorum, RhinoMocks da iyidir.
Alexander Kojevnikov

5
Pex ve Molleri kontrol etmek de faydalı olabilir, benler kısmı özellikle alay için faydalıdır.
Charles Prakash Dasari

4
FakeItEasy ile MSPec ... test senaryolarını daha okunabilir hale getiriyor
Robie

5
NSubstitute ve AutoFixture ile MSpec benim seçimim.
Daniel Hilgarth

108

MSTest ile gitmezdim. Her ne kadar Microsoft'un arkasındaki çerçevelerin gelecekteki en büyük kanıtı olsa da, en esnek çözüm değildir. Bazı saldırıları olmadan tek başına çalışmayacak. Bu yüzden Visual Studio yüklemeden TFS dışında bir yapı sunucusunda çalıştırmak zordur. Visual studio test koşucusu aslında Testdriven.Net + diğer çerçevelerden daha yavaştır. Ve bu çerçevenin sürümleri Visual Studio sürümlerine bağlı olduğu için daha az güncelleme var ve daha eski bir VS ile çalışmak zorundaysanız daha eski bir MSTest'e bağlısınız.

Kullandığınız diğer çerçevelerden hangisinin önemli olduğunu düşünmüyorum. Birinden diğerine geçmek gerçekten çok kolay.

Kişisel olarak XUnit.Net veya NUnit'i iş arkadaşlarımın tercihine göre kullanıyorum. NUnit en standart olanıdır. XUnit.Net en zayıf çerçevedir.


36
Aynı sonuca tekme atıp çığlık atıyorum. Visual Studio ile entegrasyonu nedeniyle MSTest'i gerçekten kullanmak istedim, ancak bu da zayıflığı. Microsoft olmayan bir yapı sunucusunda testleri çalıştırmak gerekir ve orada sadece bunu elde etmek için Visual Studio yüklüyorum. Microsoft'un harika araçlar üretmesi ve sonra onları neredeyse erişilemez hale getirmesi utanç verici.
Tim Long

11
MSTest olan korkunçluğu çağırmak için +1. Günün sonunda, MSTest olmadığı sürece hangi birim test çerçevesini kullandığınız önemli değil
Mike Mooney

21

MSTest'i başka bir test çerçevesiyle tamamlamayı, değiştirmemeyi düşünün. Daha tam özellikli bir test çerçevesinden faydalanırken Visual Studio MSTest entegrasyonunu koruyabilirsiniz.

Örneğin, MSTest ile xUnit kullanın. XUnit.dll derlemesine bir başvuru ekleyin ve sadece böyle bir şey yapın. Şaşırtıcı bir şekilde, sadece çalışıyor!

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);
        }
    }
}

Bu teknik aynı zamanda NUnit, MBUnit veya diğer cevaplarda belirtilen diğer test çerçeveleri için de işe yarayabilir, ancak bunları denemedim.
Matt Crouch

1
Sence bu yaklaşımla MSTest ile çalışmak için parametreli testler alabilir miyim, Matt?
Mart'ta DevDave

@DevDave Hayır. Örneğinde sadece başka bir meclisin sınıfını kullandı. Parametreli testler istiyorsanız, MSTest'i genişletmek için özel olarak oluşturulmuş başka bir test çerçevesine ihtiyacınız olacaktır.
zoran404

3
Suprisingly, it just works!Az önce başka bir montajdan statik fonksiyon çağırdınız. Neden çalıştığına şaşırdınız? Ayrıca, neden bunun için özel olarak yapılmış bir montajı kullanmamanız gerektiğine dair iddialara ihtiyacınız varsa?
zoran404

9

Nunit C ++ karma mod projeleri ile iyi çalışmıyor, bu yüzden onu bırakmak zorunda kaldı


3
Bu cevaptan gurur duymuyorum ancak bu proje için birim testlerini düşürdüm. Hataların çalışma zamanı tespiti için birçok doğrulama prosedürü yazmaya karar verdim
Eric

2
NUnit'i karma modda kullanmayı umuyordum ama aynı zamanda yetersiz buldum, sonunda mükemmel bir C ++ birim test çerçevesi ve kurulumu basit olan googletest için gittim.
chillitom

8

Küçük / kişisel ölçekte büyük bir anlaşma değil, ancak daha büyük bir ölçekte hızla daha büyük bir anlaşma haline gelebilir. İşverenim büyük bir Microsoft mağazası, ancak birkaç nedenden dolayı Team System / TFS'ye satın alamayacak / satın alamayacak. Şu anda Subversion + Orcas + MBUnit + TestDriven.NET kullanıyoruz ve iyi çalışıyor, ancak TD.NET'i almak büyük bir güçlüktü. MBUnit + TestDriven.NET'in sürüm hassasiyeti de büyük bir güçlüktür ve yasal olarak incelenmesi ve yönetilmesi ve satın alınması için tedarik için ek bir ticari şeye (TD.NET) sahip olmak önemsiz değildir. Şirketim, bir çok şirket gibi, bir MSDN Abonelik modeliyle şişman ve mutlu ve yüzlerce geliştirici için bir kereye mahsus tedarikleri idare etmek için kullanılmıyor. Başka bir deyişle, tam entegre MS teklifi, kesinlikle her zaman en iyi ekmek olmasa da, bence önemli bir katma değer.

Sanırım şu anki adımımızda kalacağız çünkü çalışıyor ve zaten kurumsal olarak kamburluğu ele geçirdik, ama eminim MS bu alanda zorlayıcı bir teklif alsaydı, böylece dev yığınımızı biraz güçlendirip basitleştirebildik.


2
ReSharper'ın bu alanda cazip bir teklifi var!
Sincap

7
Cevabınız meraklıdır ve kendisiyle çelişkili görünmektedir. Büyük bir Microsoft mağazası olduğunuzu söylüyorsunuz, ancak TFS'yi kullanmıyorsunuz (tüm mesele bu, dikey entegrasyondan faydalanamayacaksınız) ve bir MSDN abonelik modeli kullanıyorsunuz, ancak bir -MS yaklaşımı. Dürüst olmak gerekirse kayboldum. Maalesef güncel olmayan cevap.
nicodemus13

6

Çok önemli değil, aralarında geçiş yapmak oldukça kolay. MSTest'in entegre olması da önemli değil, sadece testdriven.net'i alın.

Önceki kişinin alaycı bir çerçeve seçtiği gibi, şu anda benim favorim Adedi.

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.