Tes unit, NUnit atau Visual studio?

114

Saya menggunakan Visual studio (terkadang resharper) untuk menjalankan pengujian unit saya.

Saya mendengar tentang NUnit, tetapi saya tidak tahu banyak tentangnya ...

Haruskah saya peduli? Bisakah itu menawarkan sesuatu yang lebih baik daripada studio visual?

Haruskah Saya Menggunakan NUnit dan Mengapa?

Tim
sumber
12
juga pertimbangkan xunit, namun apa pun yang Anda lakukan lihatlah TestDriven.net
Ian Ringrose
Lihat juga stackoverflow.com/questions/707444/…
David Schmitt
coba xunit.net. Ini adalah kerangka pengujian unit open source dan bagus untuk aplikasi .net.
Mukesh Arora

Jawaban:

100

NUnit memiliki sedikit keunggulan dibandingkan MS-Test

  1. Atribut suite - dapat menggabungkan pengujian dan menjalankannya secara terpisah (berguna untuk project besar dengan pengujian cepat dan lambat misalnya)
  2. Metode Assert yang Dapat Dibaca, misalnya Assert.AreEqual(expected, actual)vs.Assert.That(actual, Is.EqualTo(expected))
  3. NUnit memiliki pembaruan versi yang sering - MS-Test hanya memiliki satu per versi VS.
  4. Banyak pelari terintegrasi termasuk Resharper dan TestDriven.NET
  5. Pernyataan pesan pengecualian yang diharapkan - dapat dilakukan dengan menggunakan atribut di NUnit tetapi harus dilakukan menggunakan Try-Catch di MS-Test
  6. [TestCase]! NUnit memungkinkan pengujian parameter-ized.
Elisa
sumber
32
Pengecualian juga dapat dinyatakan dengan atribut di MS-Test: ExpectedExceptionAttribute.
Stefan Steinegger
9
Saya akan menggunakan NUnit dengan Assert.Throws <> () karena ini mengikuti Prinsip AAA, yang tidak melalui cara atribut.
Oliver Hanappi
25
# 3 bukanlah fitur, ini masalah dan # 5 adalah 100% salah; MS Test memiliki atribut ExpectedException, dan selalu memiliki .
Randolpho
4
@Elisha Seingat saya, mereka sengaja tidak mendukung pemeriksaan teks pesan karena teks tersebut dianggap tidak signifikan dan dapat sewenang-wenang. Artinya, itu tidak mempengaruhi aliran program.
Rob Kent
7
"# 3 bukanlah fitur, itu masalah" - tidak terdengar seperti cara berpikir yang sangat gesit ...
SamuelKDavis
72

Dari perspektif saya saat ini (setelah 8 bulan pengembangan dengan rata-rata sekitar 10 pengembang), saya akan menyarankan agar tidak menggunakan MSTest karena alasan berikut

  • Kerangka itu sendiri cukup lambat. Maksud saya bukan kode tes yang Anda tulis - itu di bawah kendali Anda. Maksud saya, kerangka kerja yang menjalankan pengujian tersebut lambat, baik menjalankan rangkaian pengujian, pengujian tunggal, dll.
  • Kebutuhan untuk menyimpan file Test-Metadata yang selalu menyebabkan komplikasi saat beberapa pengembang sedang mengerjakannya (membuat ulang mis. Metadata, dll.). Setiap rangkaian pengujian lainnya tidak membutuhkan file metadata. Agak menyenangkan untuk mengatur pengujian Anda, tetapi Anda dapat mencapai hal yang sama melalui namespace, class, dan nama metode.
  • Melakukan Integrasi Berkelanjutan, jika Anda ingin menjalankan pengujian unit pada mesin build Anda, Anda perlu menginstal Visual Studio di mesin itu.

Dengan kata lain, jika saya harus memutuskan lagi 8 bulan yang lalu, saya mungkin akan menggunakan NUnit. Saya mungkin tidak memiliki laporan hasil pengujian terintegrasi, tetapi pengembang akan memiliki pengalaman pengujian yang lebih mulus.

flq
sumber
6
+1, hindari MSTest kecuali Anda tidak punya pilihan. Berbagai kerangka kerja sumber terbuka lebih baik (xUnit, NUnit, MbUnit, dll).
Brannon
49

Inilah pengalaman saya dengan MS Test

  • Kami menjalankan MS Test dengan sekitar 3800 Test.
  • Diperlukan waktu sangat lama untuk pengujian baru mulai dijalankan, yang menyakitkan saat menjalankan pengujian tunggal.
  • Dibutuhkan sekitar 1GB Memori untuk menjalankan tes. Tidak, ini bukan karena kebocoran memori dalam pengujian kami. Seringkali kami mengalami OutOfMemoryExceptions.
  • Karena menggunakan banyak sumber daya, kami mulai menjalankan pengujian dari file batch. Jadi, apa manfaat keseluruhan integrasi?
  • Ini buggy dan tidak stabil:
    • Misalnya, jika Anda menghapus Atribut [Abaikan] dari sebuah pengujian, ia tidak mengenalinya, karena ia menyimpan informasi tentang pengujian di suatu tempat. Anda perlu menyegarkan daftar pengujian, yang terkadang memecahkan masalah, atau memulai ulang VS.
    • Itu secara acak tidak menyalin rakitan referensi ke direktori keluar.
    • Item Deployment (file tambahan untuk digunakan) tidak berfungsi dengan baik. Mereka diabaikan secara acak.
  • Ada informasi tersembunyi (tidak terlihat dalam kode pengujian) di file vsmdi dan testrunconfig. Jika Anda tidak peduli, itu mungkin tidak berhasil.
  • Secara fungsional mungkin sebanding dengan NUnit, tetapi sangat mahal jika Anda mempertimbangkan untuk menggunakan edisi penguji VS.

Penambahan: Kami memiliki beberapa tes lagi sekarang, bahkan tidak bisa mengatakan berapa banyak. Tidak mungkin untuk menjalankan semuanya lagi dari Visual Studio, karena OutOfMemoryExceptions dan masalah ketidakstabilan lainnya. Kami menjalankan tes dari skrip. Akan mudah untuk melihat hasil tes di Visual Studio, tetapi ketika solusi terbuka, VS lumpuh (setiap saat). Jadi kita perlu mencari tes yang gagal menggunakan pencarian teks. Tidak ada lagi keuntungan dari alat terintegrasi.


Pembaruan Lain : Kami menggunakan VS 2013 sekarang. Banyak hal berubah. Mereka menulis ulang runner uji MS Test untuk ketiga kalinya sejak kami mulai. Hal ini menyebabkan banyak perubahan yang merusak, tetapi tidak ada versi baru yang bekerja lebih baik. Kami senang bahwa kami tidak menggunakan fitur-fitur canggih dari MS Test, karena semuanya tidak lagi didukung. Sungguh memalukan. Kami masih menggunakan skrip untuk membangun dan menjalankan semua pengujian unit, karena ini lebih mudah. Visual Studio memerlukan beberapa menit untuk mulai menjalankan tes (pengukuran waktu setelah kompilasi hingga tes pertama dimulai). Mereka mungkin memperbaikinya dengan pembaruan dan ini mungkin masalah khusus proyek kami. Namun, Resharper jauh lebih cepat saat menjalankan pengujian yang sama.

Kesimpulan : Setidaknya dalam kombinasi dengan Resharper, MS Test berguna. Dan saya berharap mereka akhirnya mengetahui bagaimana test runner harus ditulis dan tidak akan melakukan perubahan yang merusak seperti ini ketika kita memperbarui Visual Studio di lain waktu.

Stefan Steinegger
sumber
Saya baru-baru ini mulai menjalankannya tanpa debugging, membuatnya jauh lebih cepat dan lebih seperti bagaimana NUnit dapat digunakan, tetapi masih buruk. Tampaknya kinerja yang buruk terkait dengan Visual Studio melakukan hal-hal yang funky saat debugging. (Artinya, gunakan "ctrl + F5" daripada hanya "F5" - Anda masih mendapatkan "integrasi" yang bagus dengan VS)
Arafangion
Jawaban bagus, menghemat waktu saya
FindOutIslamNow
18

NUnit dapat digunakan dalam kombinasi dengan studio visual. Ini adalah kerangka kerja bukan program terpisah. Jadi Anda bisa peduli apakah itu cocok untuk Anda :).

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

"Setelah menginstal plugin, Anda akan menemukan submenu baru di bawah menu alat."

Lihat http://nunitit.codeplex.com/ untuk informasi lebih lanjut tentang mengimpornya.

Juga, banyak yang dapat ditemukan dengan menggunakan pencarian SO. Topik ini mencantumkan keuntungan NUnit dibandingkan pengujian standar MS misalnya.

bastijn
sumber
3

NUnit bekerja dengan edisi Standar VS.

Per Erik Stendahl
sumber
1
Jangan lupakan versi Visual Studios express.
chobo2
Langkah pasca-pembuatan pada proyek perakitan pengujian unit - \ path \ to \ nUnit $ (TargetFileName)
Steve Gilham
1

Saya tidak yakin yang lain tetapi NUnit menyediakan GUI dan konsol yang bagus untuk menjalankan Tes Unit Anda dan Anda juga dapat menghasilkan laporan hasil eksekusi NUnit Test yang akan memberikan detail apakah tes tersebut gagal atau lulus dan juga jam berapa melakukannya ambil untuk tes unit Anda

Vinay Pandey
sumber
1

NUnit adalah kerangka pengujian unit, yang juga didukung oleh resharper. Saya pikir Anda menggunakan kerangka pengujian unit Microsoft, jadi NUnit hanyalah alternatif untuk produk Microsoft;)

Berikut ini tautan ke beranda NUnit: http://nunit.org

Oliver Hanappi
sumber
jadi maksud Anda nunit tidak membawa apa pun selain kerangka pengujian unit microsoft?
Tim
Ya, lihat tautan saya misalnya di posting saya (di atas).
bastijn
Saya menggunakan NUnit dan tidak terlalu tahu tentang kerangka pengujian unit Microsoft, jadi saya tidak bisa mengatakan mana yang lebih baik. Saya pikir ada kemungkinan besar Anda akan menemukan beberapa topik tentang perbedaan di SO.
Oliver Hanappi
Ini menyediakan beberapa konstruksi yang berguna seperti [TestCase] ​​untuk menjalankan satu metode pengujian dengan argumen yang berbeda, [Teori] - untuk membangun spesifikasi yang lebih rumit dan lainnya. Ini juga mendukung sintaks fasih yang sangat bagus untuk pernyataan. Dan, yang tak kalah pentingnya, ini digunakan lebih luas daripada MSTest, jadi Anda akan memiliki kesempatan lebih baik untuk mendapatkan dukungan / info jika Anda mendapat masalah.
elder_george
0

Di NUnit , pengujian tidak dijalankan secara paralel. Sebaliknya, tampaknya semua pengujian dijalankan pada satu thread. Di MSTest, setiap pengujian dibuat instance-nya pada thread terpisah, ini menghasilkan proses yang disisipkan. Oleh karena itu, jika pengujian A bergantung pada pengujian B untuk keberhasilannya, kemungkinan besar pengujian tersebut akan gagal karena pengujian B kemungkinan akan mulai berjalan saat pengujian A berjalan.

Mourad Samy
sumber
-12

Jika Anda menggunakan Visual Studio Anda harus menggunakan NUnit untuk melakukan pengujian unit, dan jika Anda menjalankan java (Netbeans) Anda harus menggunakan JUnit untuk pengujian unit.

Berikut adalah contoh pengujian unit kalkulator sederhana

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

        }
    }
}
Nipuna Prashan
sumber
4
Tentu saja Anda tidak harus menggunakan NUnit, ini hanya kerangka kerja, tidak ada yang memaksa Anda untuk menggunakannya. Anda bahkan bisa menulis sendiri jika bosan.
HimBromBeere