pengembangan-web-mp-pd.com

Proyek Uji NUnit vs Visual Studio 2008 untuk Unit Testing?

Saya akan memulai proyek baru di tempat kerja dan ingin masuk ke unit testing. Kami akan menggunakan VS 2008, C #, dan hal-hal ASP.NET MVC. Saya melihat menggunakan NUnit atau proyek uji bawaan yang dimiliki VS2008, tetapi saya terbuka untuk meneliti saran lain. Apakah satu sistem lebih baik dari yang lain atau mungkin lebih mudah digunakan/dipahami daripada yang lain? Saya mencari untuk mengatur proyek ini sebagai semacam "praktik terbaik" untuk upaya pengembangan kami ke depan.

Terima kasih atas bantuan dan sarannya !!

252
Ryan Skarin

Daok menamai semua pro dari proyek uji VS2008, ini adalah pro dari NUnit.

  • NUnit memiliki kerangka kerja mengejek.
  • NUnit dapat dijalankan di luar IDE, ini dapat berguna jika Anda ingin menjalankan tes pada server non MS build seperti CC.Net
  • NUnit memiliki lebih banyak versi yang keluar dari visual studio. Anda tidak perlu menunggu bertahun-tahun untuk versi baru Dan Anda tidak harus menginstal versi baru dari IDE untuk mendapatkan fitur baru.
  • Ada ekstensi yang dikembangkan untuk NUnit seperti tes baris dll.
  • Tes Visual Studio membutuhkan waktu lama untuk memulai karena suatu alasan. Ini lebih baik di 2008 tetapi masih terlalu lambat untuk seleraku. Menjalankan tes dengan cepat untuk melihat apakah Anda tidak merusak sesuatu bisa terlalu lama. NUnit dengan sesuatu seperti Testdriven.Net untuk menjalankan tes dari IDE sebenarnya jauh lebih cepat. Terutama ketika menjalankan tes tunggal.
    Menurut Kjetil Klaussen ini disebabkan oleh Visual Studio testrunner, menjalankan tes MSTest di TestDriven.Net membuat kinerja MSTest sebanding dengan NUnit.
98
Mendelt

Kerangka kerja unit-testing sebenarnya tidak terlalu penting, karena Anda dapat mengonversi kelas uji dengan file proyek terpisah dan kompilasi bersyarat (seperti ini, VS-> NUnit):

 #jika NUNIT 
 menggunakan Microsoft.VisualStudio.TestTools.UnitTesting; 
 #else 
 menggunakan NUnit.Framework; 
 menggunakan TestClass = NUnit. Framework.TestFixtureAttribute; 
 Menggunakan TestMethod = NUnit.Framework.TestAttribute; 
 Menggunakan TestInitialize = NUnit.Framework.SetUpAttribute; 
 Menggunakan TestCleanup = NUnit.Framework.TearDownribute; ] menggunakan TestContext = System.String; 
 menggunakan DeploymentItem = NUnit.Framework.DescriptionAttribute; 
 #endif 

Plugin TestDriven.Net bagus dan tidak terlalu mahal ... Dengan hanya VS2008 Anda harus menemukan tes dari kelas tes atau daftar tes. Dengan TestDriven.Net Anda dapat menjalankan tes Anda langsung dari kelas yang Anda uji. Bagaimanapun, unit test harus mudah dirawat dan dekat dengan pengembang.

64
Tuomas Hietanen

Manfaat/perubahan Kerangka Pengujian Unit Built-in VS2008

  1. Versi 2008 sekarang tersedia dalam edisi profesional (sebelum diperlukan versi VS yang mahal, ini hanya untuk pengujian unit pengembang.) Yang meninggalkan banyak pengembang dengan satu-satunya pilihan kerangka pengujian terbuka/eksternal.
  2. Dibangun pada API yang didukung oleh satu perusahaan.
  3. Gunakan alat yang sama untuk menjalankan dan membuat tes (Anda dapat menjalankannya menggunakan baris perintah juga MSTest)
  4. Desain sederhana (tidak diberi kerangka kerja Mock, tetapi ini merupakan titik awal yang bagus bagi banyak programmer)
  5. Dukungan jangka panjang diberikan (saya masih ingat apa yang terjadi pada nDoc, saya tidak ingin berkomitmen pada kerangka kerja pengujian yang mungkin tidak didukung dalam 5 tahun, tetapi saya masih menganggap nUnit kerangka kerja yang hebat.)
  6. Jika menggunakan server tim pondasi sebagai backend Anda, Anda dapat membuat item kerja atau bug dengan data pengujian yang gagal dengan cara sederhana.
34
Simara

Saya telah menggunakan NUnit selama 2 tahun. Semua baik-baik saja tetapi saya harus mengatakan bahwa sistem Unit di VS cukup bagus karena ada di dalam Gui dan dapat lebih mudah melakukan tes untuk fungsi pribadi tanpa harus dipusingkan. Juga, Unit Pengujian VS memungkinkan Anda melakukan peliputan dan hal-hal lain yang tidak bisa dilakukan oleh NUnit saja.

33

Agak di luar topik, tetapi jika Anda menggunakan NUnit, saya dapat merekomendasikan penggunaan ReSharper - ia menambahkan beberapa tombol ke UI VS yang membuatnya lebih mudah untuk dijalankan dan men-debug pengujian dari dalam IDE.

Ulasan ini sedikit kedaluwarsa, tetapi menjelaskan ini secara lebih rinci:

http://codebetter.com/blogs/paul.laudeman/archive/2006/08/15/Using-ReSharper-as-an-essential-part-of-your-TDD-toolkit.aspx

14
Richard Everett

Satu gangguan kecil dari kerangka pengujian Visual Studio adalah akan membuat banyak file uji coba yang cenderung mengacaukan direktori proyek Anda - meskipun ini bukan masalah besar.

Juga, jika Anda tidak memiliki plugin seperti TestDriven.NET, Anda tidak dapat men-debug unit tes NUnit Anda (atau MbUnit, xUnit, dll.) Dalam lingkungan Visual Studio, seperti yang Anda bisa dengan kerangka kerja pengujian Microsoft VS, yang dibangun di dalamnya.

14
Tarsier

Daging sapi utama saya dengan tes unit VS lebih dari NUnit adalah penciptaan tes VS cenderung menyuntikkan banyak kode yang dihasilkan untuk akses anggota pribadi.

Beberapa mungkin ingin menguji metode pribadi mereka, beberapa mungkin tidak, itu topik yang berbeda.

Kekhawatiran saya adalah ketika saya sedang menulis unit test mereka harus sangat dikontrol jadi saya tahu persis apa yang saya uji dan bagaimana saya mengujinya. Jika ada kode yang dibuat secara otomatis, saya kehilangan sebagian dari kepemilikan itu.

11
Ian Suttle

Saya telah melakukan beberapa TDD menggunakan keduanya dan (mungkin saya sedikit bodoh) nUnit tampaknya jauh lebih cepat dan lebih mudah digunakan untuk saya. Dan ketika saya banyak bicara, saya sangat berarti.

Dalam MS Test, ada terlalu banyak atribut, di mana-mana - kode yang melakukan tes nyata adalah garis-garis kecil yang dapat Anda baca di sana-sini. Kekacauan besar. Dalam nUnit, kode yang melakukan pengujian hanya mendominasi atribut, seperti yang seharusnya.

Juga, di nUnit, Anda hanya perlu mengklik tes yang ingin Anda jalankan (hanya satu? Semua tes yang mencakup kelas? Perakitan? Solusi?). Satu klik. Dan jendelanya jernih dan besar. Anda mendapatkan lampu hijau dan merah yang jelas. Anda benar-benar tahu apa yang terjadi dalam satu pandangan.

Dalam VSTS, daftar tes macet di bagian bawah layar, itu kecil dan jelek. Anda harus melihat dua kali untuk mengetahui apa yang terjadi. Dan Anda tidak dapat menjalankan hanya satu tes (well, saya belum mengetahuinya!).

Tapi saya mungkin salah, tentu saja - saya baru saja membaca sekitar 21 posting blog tentang "Bagaimana cara melakukan TDD sederhana menggunakan VSTS". Saya seharusnya membaca lebih lanjut, Anda benar.

Untuk nUnit, saya membacanya. Dan saya TDD pada hari yang sama. Dengan menyenangkan.

Ngomong-ngomong, saya biasanya suka produk Microsoft. Visual Studio benar-benar alat terbaik yang bisa dibeli pengembang - tetapi TDD dan manajemen Item Kerja dalam Visual Studio Team System benar-benar menyebalkan.

Semua yang terbaik. Sylvain.

11

XUnit adalah kemungkinan lain untuk proyek greenfield. Mungkin ada sintaks yang lebih intuitif, tetapi tidak benar-benar kompatibel dengan kerangka kerja lain.

http://www.codeplex.com/xunit

11
Ben Fulton

Pertama saya ingin memperbaiki pernyataan yang salah: Anda dapat menjalankan msTest di luar visual studio menggunakan baris perintah. Meskipun beberapa alat CI seperti TeamCity memiliki dukungan yang lebih baik untuk NUnit (mungkin akan berubah karena msTest menjadi lebih populer). Dalam proyek saya saat ini, kami menggunakan keduanya dan satu-satunya perbedaan besar yang kami temukan adalah bahwa mstest selalu berjalan sebagai 32bit sedangkan NUnit berjalan sebagai uji 32bit atau 64bit yang hanya penting jika kode Anda menggunakan kode asli yang bergantung pada 32/64.

9
Dror Helper

Saya mendapat pesan bahwa "struktur file NUnit lebih kaya daripada VSTest" ... Tentu saja jika Anda lebih suka struktur file NUnit, Anda dapat menggunakan solusi ini dengan cara lain, seperti ini (NUnit-> VS):

 #if !MSTEST
  using NUnit.Framework;
 #else
  using Microsoft.VisualStudio.TestTools.UnitTesting;
  using TestFixture = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute;
  using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute;
  using SetUp = Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute;
  using TearDown = Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute;
 #endif

Atau konversi lain ... :-) Ini menggunakan di sini hanya alias ke kompiler.

9
Tuomas Hietanen

Saya mulai dengan MSTest tetapi beralih karena satu alasan sederhana. MSTest tidak mendukung Warisan Metode Uji dari majelis lain.

Saya benci gagasan untuk menulis tes yang sama beberapa kali. Terutama pada proyek besar di mana metode pengujian dapat dengan mudah mencapai 100-an tes.

NUnit benar-benar melakukan apa yang saya butuhkan. Satu-satunya hal yang hilang dengan NUnit adalah Visual Studio Addin yang telah dapat menampilkan status Merah/Hijau (Seperti VSTS) dari setiap tes.

8
Th3Fix3r

Jika Anda mempertimbangkan MSTest atau nUnit, maka saya sarankan Anda melihat mbUnit. Alasan saya adalah

  1. Kompatibilitas TestDriven.Net. Tidak ada yang mengalahkan TestDriven.Net.ReRunWithDebugger terikat dengan kombinasi keyboard.
  2. Kerangka kerja Gallio. Gallio adalah pelari ujian seperti nUnits. Satu-satunya perbedaan adalah tidak peduli jika Anda menulis tes Anda di nUnit, msTest, xUnit atau mbUnit. Mereka semua lari.
  3. Kompatibilitas dengan nUnit. Semua fitur di nUnit didukung oleh mbUnit. Saya pikir Anda bahkan tidak perlu mengubah atribut Anda (harus memeriksanya), hanya referensi dan penggunaan Anda.
  4. Koleksi menegaskan. mbUnit memiliki lebih banyak Assert cases, termasuk kelas CollectionAssert. Pada dasarnya Anda tidak perlu lagi menulis tes Anda sendiri untuk melihat apakah 2 koleksi itu sama.
  5. Tes kombinasi. Bukankah lebih keren jika Anda bisa menyediakan dua set data dan mendapatkan tes untuk semua kombinasi data. Itu di mbUnit.

Saya awalnya mengambil mbUnit karena fungsinya [RowTest ....], dan saya belum menemukan satu alasan pun untuk kembali. Saya memindahkan semua suite tes aktif saya dari nUnit, dan tidak pernah melihat ke belakang. Sejak itu saya telah mengonversi dua tim pengembangan berbeda ke manfaatnya.

7
AlSki
7
EfForEffort

Saya tidak suka kerangka kerja built-in VS karena memaksa Anda untuk membuat proyek terpisah sebagai lawan memiliki tes Anda sebagai bagian dari proyek yang Anda uji.

6
Gene Mitelman

Sejauh yang saya tahu, ada empat kerangka kerja yang tersedia untuk pengujian unit dengan .NET hari ini

  • NUnit
  • MbUnit
  • MSTest
  • xUnit

NUnit selalu berada di depan tetapi kesenjangan telah ditutup pada sekitar setahun terakhir. Saya masih lebih suka NUnit sendiri, terutama karena mereka menambahkan antarmuka yang lancar beberapa waktu lalu yang membuat tes sangat mudah dibaca.

Jika Anda baru memulai dengan unit yang mengujinya, mungkin tidak ada banyak perbedaan. Setelah Anda mencapai kecepatan Anda akan berada dalam posisi yang lebih baik untuk menilai kerangka mana yang terbaik untuk kebutuhan Anda.

6
gilles27

MSTest pada dasarnya NUnit sedikit dikerjakan ulang, dengan beberapa fitur baru (seperti pengaturan perakitan dan teardown, bukan hanya fixture dan tingkat pengujian), dan kehilangan beberapa bit terbaik (seperti sintaks kendala 2,4 baru). NUnit lebih matang, dan ada lebih banyak dukungan dari vendor lain; dan tentu saja karena selalu gratis (sedangkan MSTest hanya membuatnya menjadi versi Profesional 2008, sebelum itu itu cara SKU lebih mahal), sebagian besar proyek ALT.NET menggunakannya.

Karena itu, ada beberapa perusahaan yang sangat enggan untuk menggunakan sesuatu yang tidak memiliki label Microsoft di atasnya, dan terutama kode OSS. Jadi memiliki kerangka kerja uji MS resmi mungkin menjadi motivasi bahwa perusahaan-perusahaan perlu mendapatkan pengujian; dan mari kita jujur, itu pengujian yang penting, bukan alat apa yang Anda gunakan (dan menggunakan kode Tuomas Hietanen di atas, Anda hampir dapat membuat kerangka pengujian Anda dapat dipertukarkan).

5
David Keaveny

Dengan rilis dalam .NET 4.0 dari sistem Kontrak Kontrak dan ketersediaan pemeriksa statis , Anda akan perlu secara teoritis menulis lebih sedikit kasus uji dan alat seperti Pex akan membantu mengidentifikasi kasus-kasus itu. Terkait hal ini dengan diskusi yang sedang berlangsung, jika Anda perlu melakukan lebih sedikit dengan tes unit Anda karena kontrak Anda menutupi ekor Anda, maka mengapa tidak langsung saja menggunakan potongan bawaan karena itu adalah satu kurang ketergantungan untuk mengelola. Hari-hari ini, saya semua tentang kesederhanaan. :-)

Lihat juga:

4
Norman H

Saya lebih suka menggunakan kerangka uji MS kecil, tetapi untuk saat ini saya tetap dengan NUnit. Masalah dengan MS umumnya (untuk saya)

  • File "tes" yang dibagikan (tanpa tujuan) yang harus dipertahankan
  • Daftar tes menyebabkan konflik dengan banyak pengembang/VCS
  • UI terintegrasi yang buruk - pengaturan yang membingungkan, pemilihan tes yang memberatkan
  • Tidak ada pelari eksternal yang baik

Peringatan - Jika saya menguji situs aspx, saya akan pasti menggunakan MS - Jika saya mengembangkan solo, juga MS akan baik-baik saja - Jika saya memiliki keterampilan terbatas dan tidak dapat mengkonfigurasi NUnit :)

Saya merasa jauh lebih mudah untuk hanya menulis tes saya dan menjalankan NUnitGUI atau salah satu ujung depan lainnya (testDriven jauh jauh jauh lebih mahal). Menyiapkan debugging dengan versi commandline juga cukup mudah.

3
Andrew Backer