Birim testi, NUnit veya Görsel stüdyo?


114

Birim testimi çalıştırmak için Visual Studio (bazen yeniden paylaşıcı) kullanıyorum.

NUnit'i duydum ama hakkında pek bir şey bilmiyorum ...

Umursamalı mıyım? Görsel stüdyodan daha iyi bir şey sunabilir mi?

NUnit Kullanmalı mıyım ve neden?


12
xunit'i de düşünün, ancak ne yaparsanız yapın TestDriven.net'e bir göz atın
Ian Ringrose


xunit.net'i deneyin. Net uygulaması için açık kaynak kodlu ve güzel birim test çerçevesidir.
Mukesh Arora

Yanıtlar:


100

NUnit'in MS-Test'e göre birkaç avantajı vardır

  1. Suite özelliği - testleri toplayabilir ve ayrı ayrı çalıştırabilir (örneğin, hızlı ve yavaş testlerin olduğu büyük projeler için kullanışlıdır)
  2. Okunabilir Assert yöntemi, örneğin Assert.AreEqual(expected, actual)vsAssert.That(actual, Is.EqualTo(expected))
  3. NUnit'in sık sürüm güncellemeleri vardır - MS-Test'te VS sürümü başına yalnızca bir tane vardır.
  4. Resharper ve TestDriven.NET dahil birçok entegre koşucu
  5. Beklenen istisna mesajı onaylama - NUnit'teki öznitelik kullanılarak yapılabilir ancak MS-Test'te Try-Catch kullanılarak yapılmalıdır
  6. [TestCase]! NUnit parametreleştirilmiş testlere izin verir.

32
Özel durum, MS-Test: ExpectedExceptionAttribute içindeki öznitelik tarafından da ileri sürülebilir.
Stefan Steinegger

9
NUnit'i Assert.Throws <> () ile kullanırdım çünkü bu, nitelik yolu için geçmeyen AAA Prensibini izler.
Oliver Hanappi

25
# 3 bir özellik değil, bir sorun ve # 5% 100 yanlış; MS Test, ExpectedException özniteliğine sahiptir ve her zaman vardır .
Randolpho

4
@Elisha Hatırladığım kadarıyla, mesaj metni kontrolünü kasıtlı olarak desteklemiyorlardı çünkü metin önemli görülmüyor ve keyfi olabilir. Yani bir programın akışını etkilemez.
Rob Kent

7
"# 3 bir özellik değil, sorun" - kulağa çok çevik bir düşünce tarzı gibi gelmiyor ...
SamuelKDavis

72

Benim şimdiki bakış açısından ben tavsiye ediyorum (ortalama olarak yaklaşık 10 geliştiricileri ile kalkınma 8 ay sonra) karşı aşağıdaki nedenlerle mstest kullanarak

  • Çerçeve kendi içinde oldukça yavaştır. Yazdığınız test kodunu kastetmiyorum - bu sizin kontrolünüz altında. Demek istediğim, bu testleri çalıştıran çerçeve, ister bir test paketi, ister tek testler vb. Çalıştırıyor olsun, yavaş.
  • Üzerinde birkaç geliştirici çalışırken her zaman karmaşıklıklara yol açan bir Test Metadata dosyası tutma ihtiyacı (yeniden oluşturma örneğin meta veriler vb.). Diğer tüm test paketlerinin bir meta veri dosyasına ihtiyacı yoktur. Testlerinizi organize etmek biraz hoş ama aynı şeyi ad alanları, sınıflar ve yöntem adları aracılığıyla da elde edebilirsiniz.
  • Sürekli Entegrasyon yapmak, derleme makinenizde birim testleri çalıştırmak istiyorsanız, o makineye Visual Studio yüklemeniz gerekir.

Diğer bir deyişle, 8 ay önce tekrar karar vermek zorunda kalsaydım, muhtemelen NUnit'i alırdım. Entegre test sonuçları raporuna sahip olmayabilirim, ancak geliştiricilerin daha sorunsuz bir test deneyimi olacak.


6
+1, seçeneğiniz yoksa MSTest'ten kaçının. Çeşitli açık kaynaklı çerçeveler daha iyidir (xUnit, NUnit, MbUnit, vb.).
Brannon

49

İşte MS Testi ile ilgili deneyimim

  • MS Testini yaklaşık 3800 Test ile çalıştırıyoruz.
  • Testlerin yürütülmeye başlaması çok uzun sürüyor, bu da tek testleri çalıştırırken acı veriyor.
  • Testlerin yürütülmesi yaklaşık 1GB Bellek alır. Hayır, testlerimizdeki bellek sızıntılarından kaynaklanmıyor. Sık sık OutOfMemoryExceptions ile karşılaşıyoruz.
  • Bu kadar çok kaynak kullandığı için, testleri toplu iş dosyalarından yürütmeye başlıyoruz. Peki tüm entegrasyon ne işe yarar?
  • Hatalı ve dengesiz:
    • Örneğin, bir testten [Yoksay] Özniteliğini kaldırırsanız, o, testler hakkındaki bilgileri bir yerde önbelleğe aldığından onu tanımaz. Bazen sorunu çözen test listesini yenilemeniz veya VS'yi yeniden başlatmanız gerekir.
    • Rastgele başvuru derlemelerini çıkış dizinine kopyalamaz.
    • Dağıtım Öğeleri (kullanılacak ek dosyalar) düzgün çalışmıyor. Rastgele göz ardı edilirler.
  • Vsmdi ve testrunconfig dosyalarında gizli (test kodunda görünmez) bilgi vardır. Eğer umursamıyorsanız, işe yaramayabilir.
  • İşlevsel olarak NUnit ile karşılaştırılabilir, ancak VS tester sürümünü kullanmayı düşünürseniz çok pahalıdır.

Ek: Şimdi daha fazla testimiz var, kaç tane olduğunu bile söyleyemiyoruz. OutOfMemoryExceptions ve diğer kararsızlık sorunları nedeniyle artık hepsini Visual Studio'dan çalıştırmak imkansız. Testleri komut dosyalarından çalıştırıyoruz. Test sonuçlarını Visual Studio'da görüntülemek kolay olurdu, ancak çözüm açık olduğunda VS çöküyor (her seferinde). Bu nedenle, metin aramayı kullanarak başarısız testleri aramamız gerekiyor. Artık entegre bir aracın avantajı yok.


Başka Bir Güncelleme : Şu anda VS 2013 kullanıyoruz. Bir çok şey değişti. Başladığımızdan beri MS Test test koşucusunu üçüncü kez yeniden yazdılar. Bu çok fazla değişikliğe neden oldu, ancak yeni sürümlerden hiçbiri daha iyi bir şey yapmıyordu. MS Test'in süslü özelliklerini kullanmadığımız için mutluyuz çünkü artık hepsi desteklenmiyor. Gerçekten utanç verici. Daha kullanışlı olduğu için hala tüm birim testlerini oluşturmak ve çalıştırmak için komut dosyalarını kullanıyoruz. Visual Studio, testleri çalıştırmaya başlamak için birkaç dakika gerektirir (derlemeden sonra ilk test başlayana kadar süre ölçer). Muhtemelen bir güncellemeyle düzeltirler ve bu projemizin belirli bir sorunu olabilir. Bununla birlikte, Resharper, aynı testleri çalıştırırken çok daha hızlıdır.

Sonuç : En azından Resharper ile kombinasyon halinde, MS Testi faydalıdır. Ve umarım sonunda test çalıştırıcısının nasıl yazılması gerektiğini öğrenirler ve Visual Studio'yu bir dahaki sefere güncellediğimizde bu tür kırılma değişiklikleri yapmazlar.


Son zamanlarda onları hata ayıklamadan çalıştırmaya başladım, çok daha hızlı hale getiriyor ve daha çok NUnit'in nasıl kullanılacağına benziyor, ancak yine de berbat. Görünüşe göre düşük performans, Visual Studio'nun hata ayıklama sırasında eğlenceli şeyler yapmasıyla ilgili. (Yani, sadece "F5" yerine "ctrl + F5" kullanın - VS ile güzel bir "entegrasyon" elde etmeye devam edersiniz)
Arafangion

İyi cevap, zamanımı kurtardı
FindOutIslamNow

18

NUnit kullanılabilecek kombine görsel stüdyo ile. Ayrı bir program değil bir çerçevedir. Böylece size uygun olup olmadığına bakabilirsiniz :).

alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

"Eklentiyi kurduktan sonra, araçlar menüsü altında yeni bir alt menü bulacaksınız."

İçe aktarmayla ilgili daha fazla bilgi için http://nunitit.codeplex.com/ adresine bakın .

Ayrıca, SO araması kullanılarak çok şey bulunabilir. Bu konu , örneğin MS standart testine göre NUnit'in avantajlarını listeler.



3

NUnit, VS'nin Standart sürümüyle çalışır.


1
Visual Studios'un ekspres sürümlerini unutmayın.
chobo2

Birim testi derleme projesinde derleme sonrası adım - \ yol \ için \ nUnit $ (TargetFileName)
Steve

1

Diğerlerinden emin değilim, ancak NUnit, Birim Testlerinizi çalıştırmak için güzel bir GUI ve konsol sağlar ve ayrıca, testin başarısız olup olmadığı veya geçtiği ve ayrıca ne zaman geçtiği hakkında ayrıntılı bilgi veren NUnit Test yürütmesinin sonucunun raporunu oluşturabilirsiniz. birim testine katıl


1

NUnit, yeniden paylaşım tarafından da desteklenen bir birim test çerçevesidir. Microsoft'un birim test çerçevesini kullandığınızı düşünüyorum, bu nedenle NUnit yalnızca Microsoft ürününe bir alternatiftir;)

İşte NUnit'in ana sayfasına bağlantı: http://nunit.org


yani nunit'in microsoft birim test çerçevesinden başka bir şey getirmediğini mi söylüyorsunuz?
Tim

Yapıyor, örneğin yazımda (yukarıda) bağlantıma bakın.
bastijn

NUnit kullanıyorum ve Microsoft'un birim testi çerçevesini gerçekten bilmiyorum, bu yüzden neyin daha iyi olduğunu söyleyemem. SO'da buradaki farklılıklarla ilgili bazı konular bulmanızın iyi bir şans olduğunu düşünüyorum.
Oliver Hanappi

Farklı bağımsız değişkenlere sahip bir test yöntemi çalıştırmak için [TestCase], daha ayrıntılı özellikler oluşturmak için [Teori] ve diğerleri gibi bazı yararlı yapılar sağlar. Ayrıca iddialar için çok güzel akıcı sözdizimini destekler. Ve son olarak, ancak en az değil, MSTest'ten çok daha geniş kullanılır, bu nedenle başınız derde girerse destek / bilgi alma şansınız artar.
elder_george

0

In NUnit testler paralel olarak yürütülmez. Bunun yerine, tüm testlerin tek bir iş parçacığı üzerinde yürütüldüğü görülmektedir. MSTest'te, her bir test ayrı bir iş parçacığı üzerinde başlatılır, bu işlemlerin araya eklenmesi sonucunu verir. Bu nedenle, test A, başarısı için test B'ye bağlıysa, test A çalışırken test B muhtemelen çalışmaya başlayacağından büyük olasılıkla başarısız olacaktır.


-12

Visual Studio kullanıyorsanız Birim testi yapmak için NUnit kullanmalısınız ve java (Netbeans) çalıştırıyorsanız, birim testi için JUnit kullanmalısınız.

İşte basit bir hesap makinesi birimi testi için bir örnek

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimpleCalculator;
using NUnit.Framework;

namespace CalculatorTest
{
    [TestFixture]
    public class Class1
    {
        public Calculator _calculator;
        [TestFixtureSetUp]
        public void Initialize()
        {
            _calculator = new Calculator();
        }
        [Test]
        public void DivideTest()
        {
            int a = 10;
            int b = 2;
            int expectedValue = a / b;
            int actualvalue = _calculator.Divide(a, b);
            Assert.AreEqual(expectedValue, actualvalue,"Failure");

        }
    }
}

4
Elbette NUnit'i kullanmak zorunda değilsiniz , bu sadece bir çerçevedir, kimse sizi kullanmaya zorlamaz. Sıkılırsan kendi bir tane bile yazabilirsin.
HimBromBeere
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.