Apakah unit uji "menggunakan" proyek, atau hanya memiliki namespace yang sama?

10

Latar Belakang

Saya sedang mengerjakan proyek dengan C # .NET, dan saya baru saja menambahkan proyek unit test baru untuk solusi saya di Visual Studio. Cara saya selalu melakukan ini adalah:

  1. Buat proyek uji unit baru.
  2. Mintalah proyek itu memasukkan referensi ke proyek yang sedang diuji .
  3. Cukup sertakan ( using) proyek.

Saya kira cara lain yang bisa Anda lakukan adalah ...

  1. Buat proyek uji unit baru.
  2. Mintalah proyek itu memasukkan referensi ke proyek yang sedang diuji .
  3. Buat proyek uji unit berbagi namespace dengan proyek yang sedang diuji .

Pertanyaan

Apakah ada cara yang diterima untuk melakukan ini untuk proyek-proyek di dunia .NET, atau , apakah ini hanya pendapat dan tidak ada yang lebih dari itu?

Mengintip
sumber
3
Menggunakan namespace yang sama sepertinya cara untuk berakhir dengan konflik namespace. Dan Anda masih perlu referensi ke majelis yang berisi kode yang sedang diuji.
David Arno
2
Saya setuju dengan David. Kecuali Anda berhati-hati untuk secara eksplisit menyebut metode pengujian Anda sesuatu yang berbeda dengan metode yang diuji, Anda berisiko mengalami konflik penamaan. Saya hanya tidak melihat bagaimana berbagi namespace membawa sesuatu ke pesta.
Robbie Dee
2
Jika ditulis dengan benar, tes tidak boleh bertentangan, karena nama metode akan menjadi seperti MethodName_StateUnderTest_ExpectedBehavior(), dan saya yakin Anda bisa menemukan nama yang tidak bertentangan untuk kelas tes. Pertanyaan sebenarnya adalah: apakah Anda benar-benar ingin jenis-jenis itu muncul di intellisense Anda?
Robert Harvey
1
@DavidArno TDD tidak berlaku di setiap situasi. Jika semua kode saya lakukan adalah pergi dan baca beberapa perangkat elektronik dan kembalikan hasilnya (yang merupakan 99% dari waktu untuk menulis kode EE) ... Yang saya pedulikan adalah apakah saya mendapatkan nilai yang benar, pada titik itu tidak masalah apakah saya menulis tes sebelum atau sesudah.
Mengintip
1
@ StevieV, permintaan maaf saya, itu tidak seharusnya menjadi komentar serius (jadi wajah yang tersenyum), tapi saya kira itu tidak muncul seperti itu.
David Arno

Jawaban:

13

Tes unit Anda dalam proyek terpisah dan melayani fungsi terpisah dari kode utama Anda, jadi menempatkan mereka ke ruang nama yang terpisah sangat masuk akal bagi saya.

Jika Anda mempertimbangkan untuk menempatkan mereka di namespace yang sama hanya untuk menyimpan usinggaris, maka jangan. Kode kurang baik, kode lebih jelas lebih baik.

svick
sumber
2
Dan Anda tidak ingin merilis / mendistribusikan / menyebarkan tes unit.
radarbob
1
Menempatkan tes di namespace terpisah memastikan (dalam beberapa bahasa) bahwa Anda melihat API sebagai konsumen pihak ketiga, yaitu, tidak mengakses anggota yang hanya dapat diakses ke kelas di namespace yang sama. Dengan mudah, pengujian Anda akan membungkam peringatan palsu tentang anggota API publik Anda yang tidak direferensikan atau diekspos secara tidak perlu.
StackOverthrow
@TKK Pertanyaannya adalah tentang C # dan di C #, ruang nama tidak berfungsi seperti itu.
svick
@svick: ya, dan C # tidak memaksa Anda untuk memberikan setiap majelis namespace sendiri. Namun, ini adalah konvensi yang bermanfaat, terutama dalam proyek-proyek yang lebih besar, dan saya tidak akan menangani unit uji coba secara berbeda dari perakitan lainnya.
Doc Brown
1

Saya telah menggunakan proyek unit test dengan namespace yang sama dengan proyek sebenarnya (dengan menghapus Testssufiks secara manual pada namespace proyek uji) selama beberapa tahun tanpa masalah.

Saya pikir ini mengarah ke kode yang lebih mudah jadi saya biasanya menyarankan pergi pendekatan itu. Beberapa kekurangan, seperti potensi konflik namespace, tidak boleh terjadi ketika berhadapan dengan proyek unit test karena Anda sudah mengikuti beberapa konvensi pengujian untuk itu, seperti mencekik semua kelas uji dengan Tests. Selain itu, bagi saya kedengarannya cukup intuitif untuk memiliki kelas dan kelas tes di namespace yang sama.

Beberapa orang akan berpikir itu aneh, tetapi ini seharusnya tidak menjadi masalah, karena banyak kerangka kerja majelis juga menggunakan strategi ini memiliki beberapa DLL yang memiliki kelas di ruang nama yang sama: itu tidak seharusnya menjadi hal yang mengejutkan atau buruk berlatih di dalam dan dari dirinya sendiri.

Saya pikir ini lebih pada selera pribadi, jadi itu tidak benar-benar "jawab" per-se. Setelah mengatakan itu, "pilihanku", sesuai alasan di atas, adalah untuk mencobanya sendiri pada awalnya, dan jika Anda suka pendekatannya, lakukanlah.

julealgon
sumber