NUnit vs MbUnit vs MSTest vs xUnit.net [ditutup]

390

Ada cukup banyak kerangka kerja unittesting di luar sana untuk .NET. Saya menemukan perbandingan fitur kecil ini: http://xunit.github.io/docs/comparisons.html

Sekarang saya harus memilih yang terbaik untuk kita. Tapi bagaimana caranya? Apakah itu penting? Mana yang merupakan bukti paling masa depan dan memiliki momentum yang layak di belakangnya? Haruskah saya peduli fitur-fiturnya? Sementara xUnit tampaknya paling modern dan dirancang khusus untuk .NET, NUnit tampaknya menjadi salah satu yang diterima secara luas. MSTest lagi sudah terintegrasi ke dalam Visual Studio ...

bitbonk
sumber
11
Tabel perbandingan itu sudah ketinggalan zaman. Sebagai contoh, NUnit juga memiliki Assert.Throws dll, dan semua yang ada di tabel Assertions adalah API lama. Assert baru. Itu (..., Is ....) sintaks yang lancar jauh lebih baik, dan telah ada untuk sementara waktu sekarang.
Jim Cooper
11
Apakah Anda tahu ada tabel yang lebih mutakhir?
bitbonk
1
Akhir 2013, pindah dari xUnit.net => NUnit. Perhatikan juga bahwa xUnit.NET (proyek)! = XUnit (kategori, di mana NUnit adalah anggota)
DeepSpace101
3
@Apakah sebabnya Anda pindah dari xUnity.net => NUnit?
Alexander Logger
2
Pertanyaan serupa diajukan pada 2014 Visual Studio 2013 MSTest vs NUnit
Michael Freidgeim

Jawaban:

197

Saya tahu ini adalah utas lama, tetapi saya pikir saya akan mengirim suara untuk xUnit.NET . Sementara sebagian besar kerangka pengujian lain yang disebutkan semuanya hampir sama, xUnit.NET telah mengambil pendekatan yang cukup unik, modern, dan fleksibel untuk pengujian unit. Ini mengubah terminologi, sehingga Anda tidak lagi menentukan TestFixtures dan Tes ... Anda menentukan Fakta dan Teori tentang kode Anda, yang mengintegrasikan lebih baik dengan konsep apa tes dari perspektif TDD / BDD.

xUnit.NET juga sangat extensible. Kelas atribut FactAttribute dan TraitAttribute tidak disegel, dan menyediakan metode dasar yang dapat ditangguhkan yang memberi Anda banyak kendali atas bagaimana metode yang harus di-hiasi oleh atribut tersebut. Meskipun xUnit.NET dalam bentuk standarnya memungkinkan Anda untuk menulis kelas pengujian yang mirip dengan perlengkapan tes NUnit dengan metode pengujian mereka, Anda tidak terbatas pada bentuk pengujian unit ini sama sekali. Anda bebas memperluas kerangka kerja untuk mendukung spesifikasi Kepedulian / Konteks / Observasi gaya BDD, seperti yang digambarkan di sini .

xUnit.NET juga mendukung pengujian gaya fit langsung di luar kotak dengan atribut Teori dan atribut data yang sesuai. Data input yang sesuai dapat diambil dari excel, database, atau bahkan sumber data khusus seperti dokumen Word (dengan memperluas atribut data dasar.) Ini memungkinkan Anda untuk memanfaatkan platform pengujian tunggal untuk tes unit dan tes integrasi, yang bisa sangat besar dalam mengurangi ketergantungan produk dan pelatihan yang diperlukan.

Pendekatan lain untuk pengujian juga dapat diimplementasikan dengan xUnit.NET ... kemungkinannya tidak terbatas. Dikombinasikan dengan kerangka kerja mengejek yang sangat maju, Moq , keduanya menciptakan platform yang sangat fleksibel, dapat dikembangkan, dan kuat untuk menerapkan pengujian otomatis.

jrista
sumber
35
Meskipun ini benar + setahun yang lalu, NUnit telah menambahkan sebagian besar atribut yang dipertanyakan. Di NUnit Anda bisa menulis tes dengan cara apa pun.
Mark Levison
8
Ini bukan tentang atribut mana yang tersedia, tetapi bagaimana atribut itu dapat digunakan. xUnit.NET dirancang dari bawah ke atas untuk menjadi kerangka kerja yang sangat fleksibel dan dapat diperpanjang yang tidak mengunci Anda ke dalam metode pengujian tertentu, dan tidak mengharuskan Anda untuk secara teratur memperbarui kerangka inti untuk mendapatkan kemampuan terbaru.
jrista
9
1. Nama-nama yang sangat berbeda pada atribut tidak akan banyak berarti. 2. NUnit dapat diperpanjang dan terus diperluas:? 3. parameter baris data untuk pengujian didukung dalam nunit. Waktu lalu mereka didukung dalam ekstensi :) 4. Nunit dikombinasikan dengan Moq menciptakan hal yang sama. 5. Untuk BDD saya akan mengatakan specflow, yang terintegrasi dengan mudah dengan banyak kerangka kerja pengujian unit.
graffic
8
Saya suka suara xUnit, tetapi memiliki dokumentasi nihil :(
Kolonel Panic
10
xUnit tidak memiliki dokumentasi apa pun! misalnya: Coba temukan apa yang Traitsebenarnya atau jika Anda dapat mengelompokkan tes yang berbeda dalam tes induk tunggal (mis. semua testsdalam a testfixture). nUnit menciptakan tampilan hierarki yang hebat alih-alih tampilan flat dari pengujian xUnit. Ditambah nomenklatur tidak masuk akal - fakta dan teori? Jadilah realistik! Itu lebih baik disebut tes dan data.
DeepSpace101
134

NUnit mungkin yang paling didukung oleh alat pihak ke-3. Ini juga sudah ada lebih lama dari tiga lainnya.

Saya pribadi tidak terlalu peduli tentang kerangka kerja unit test, mengejek perpustakaan adalah IMHO jauh lebih penting (dan mengunci Anda lebih banyak). Pilih saja dan pertahankan.

Alexander Kojevnikov
sumber
3
apa pilihan perpustakaan tiruan teratas Anda?
dplante
31
Saya suka Moq, RhinoMocks juga bagus.
Alexander Kojevnikov
5
Mungkin juga bermanfaat untuk memeriksa Pex dan Tahi Lalat, bagian tahi lalat terutama berguna untuk mengejek.
Charles Prakash Dasari
4
MSPec dengan FakeItEasy ... membuat test case lebih mudah dibaca
Robie
5
MSpec dengan NSubstitute dan AutoFixture adalah pilihan saya.
Daniel Hilgarth
108

Saya tidak akan pergi dengan MSTest. Meskipun mungkin bukti kerangka kerja masa depan dengan Microsoft di belakang itu bukan solusi yang paling fleksibel. Itu tidak akan berjalan sendiri tanpa hack. Jadi menjalankannya di server build selain TFS tanpa menginstal Visual Studio itu sulit. Test-runner visual studio sebenarnya lebih lambat dari Testdriven.Net + salah satu kerangka kerja lainnya. Dan karena rilis kerangka kerja ini terkait dengan rilis Visual Studio ada lebih sedikit pembaruan dan jika Anda harus bekerja dengan VS yang lebih lama Anda terikat dengan MSTest yang lebih tua.

Saya tidak berpikir itu penting banyak dari kerangka kerja lain yang Anda gunakan. Sangat mudah untuk beralih dari satu ke yang lain.

Saya pribadi menggunakan XUnit.Net atau NUnit tergantung pada preferensi rekan kerja saya. NUnit adalah yang paling standar. XUnit.Net adalah kerangka kerja paling ramping.

Mendelt
sumber
36
Saya diseret menendang dan berteriak ke kesimpulan yang sama ini. Saya benar-benar ingin menggunakan MSTest karena integrasi dengan Visual Studio, tetapi itu juga kelemahannya. Saya perlu menjalankan tes pada server non-Microsoft build dan tidak mungkin saya menginstal Visual Studio hanya untuk mendapatkannya. Sangat memalukan bahwa Microsoft menghasilkan alat yang hebat dan kemudian membuatnya hampir tidak mungkin tercapai.
Tim Long
11
+1 untuk menyebut betapa buruknya MSTest. Pada akhirnya, tidak masalah kerangka pengujian unit mana yang Anda gunakan, asalkan bukan MSTest
Mike Mooney
21

Pertimbangkan menambah, bukan mengganti, MSTest dengan kerangka kerja pengujian lainnya. Anda dapat menjaga integrasi Visual Studio MSTest sambil mendapatkan manfaat dari kerangka kerja pengujian yang lebih lengkap.

Sebagai contoh, saya menggunakan xUnit dengan MSTest. Tambahkan referensi ke rakitan xUnit.dll, dan lakukan sesuatu seperti ini. Ternyata, itu hanya berhasil!

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);
        }
    }
}
Matt Crouch
sumber
Teknik ini juga dapat bekerja untuk NUnit, MBUnit, atau kerangka kerja pengujian lain yang disebutkan dalam jawaban lain, tetapi saya belum mencobanya.
Matt Crouch
1
apakah Anda pikir saya bisa mendapatkan tes parameter untuk bekerja dengan MSTest dengan pendekatan ini, Matt?
DevDave
@DevDave No. Dalam contohnya dia hanya menggunakan kelas dari majelis lain. Jika Anda ingin pengujian parameter, Anda membutuhkan kerangka pengujian lain yang dibuat khusus untuk memperpanjang MSTest.
zoran404
3
Suprisingly, it just works!Anda baru saja memanggil fungsi statis dari perakitan lain. Mengapa Anda terkejut bahwa itu berhasil? Juga jika Anda hanya perlu penegasan bahwa mengapa tidak menggunakan perakitan khusus dibuat untuk itu?
zoran404
9

Nunit tidak bekerja dengan baik dengan proyek-proyek mode campuran di C ++ jadi saya harus membatalkannya

Eric
sumber
3
Saya tidak bangga dengan jawaban ini tetapi saya membatalkan pengujian unit untuk proyek itu. Saya terpaksa menulis banyak prosedur validasi untuk mendeteksi kesalahan runtime
Eric
2
Saya berharap untuk menggunakan NUnit dalam mode campuran tetapi juga menemukan itu tidak memadai, pada akhirnya saya pergi untuk googletest yang merupakan kerangka uji unit C ++ yang sangat baik dan v mudah diatur.
chillitom
8

Ini bukan masalah besar dalam skala kecil / pribadi, tetapi bisa menjadi masalah yang lebih besar dengan cepat dalam skala yang lebih besar. Majikan saya adalah toko Microsoft yang besar, tetapi tidak akan / tidak dapat membeli ke dalam Sistem Tim / TFS karena sejumlah alasan. Kami saat ini menggunakan Subversion + Orcas + MBUnit + TestDriven.NET dan bekerja dengan baik, tetapi mendapatkan TD.NET sangat merepotkan. Sensitivitas versi MBUnit + TestDriven.NET juga merupakan masalah besar, dan memiliki satu hal komersial tambahan (TD.NET) untuk hukum untuk ditinjau dan pengadaan untuk menangani dan mengelola, tidak sepele. Perusahaan saya, seperti banyak perusahaan, gemuk dan senang dengan model Berlangganan MSDN, dan itu tidak digunakan untuk menangani satu dari pengadaan untuk ratusan pengembang. Dengan kata lain, tawaran MS yang terintegrasi penuh, walaupun jelas tidak selalu terbaik, adalah nilai tambah yang signifikan menurut saya.

Saya pikir kami akan tetap dengan langkah kami saat ini karena itu bekerja dan kami sudah mengatasi punuk secara organisasi, tapi saya sungguh berharap MS memiliki penawaran yang menarik di ruang ini sehingga kami dapat mengkonsolidasikan dan menyederhanakan tumpukan dev kami sedikit.

pengguna8133
sumber
2
ReSharper memang memiliki penawaran menarik di ruang ini!
Squirrel
7
Jawaban Anda ingin tahu, dan tampaknya saling bertentangan. Anda mengatakan bahwa Anda adalah toko Microsoft yang besar, tetapi tidak akan menggunakan TFS (yang merupakan intinya - Anda tidak akan mendapatkan manfaat dari integrasi vertikal tanpanya) dan menggunakan model berlangganan MSDN, tetapi menggunakan Pendekatan -MS. Aku tersesat, jujur ​​saja. Sayangnya jawaban yang ketinggalan zaman.
nicodemus13
6

Ini bukan masalah besar, cukup mudah untuk beralih di antara mereka. MSTest terintegrasi juga bukan masalah besar, hanya ambil testdriven.net.

Seperti kata orang sebelumnya, pilih kerangka kerja yang mengejek, favorit saya saat ini adalah Moq.


sumber