Kami menggunakan StructureMap dalam proyek pengembangan perangkat lunak baru. Salah satu anggota tim telah menerapkan uji unit yang pada dasarnya menguji konfigurasi kontainer StructureMap . Ini melakukan ini dengan melakukan hal berikut;
- Menghitung jumlah instance rakitan yang dikonfigurasikan untuk kelas di namespace aplikasi kami.
- Menentukan instance yang diharapkan di tingkat kelas
- Menyatakan bahwa instance yang diharapkan cocok dengan total instance yang ditemukan.
- Menyatakan bahwa instance yang diharapkan cocok dengan yang didefinisikan dalam tes
Contohnya adalah;
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
Kami juga memiliki 'unit test' untuk kelas berikut;
public MyClass(IEnvironmentRepository environmentRepository)
{
}
Dalam tes ini, kami mengejek IEnvironmentRepository, jadi tidak akan menyuntikkannya dari wadah seperti yang akan terjadi pada sistem live.
Seorang kolega mengabaikan tes unit pada konfigurasi structuremap dengan komentar di sepanjang baris "Tes unit hanya menguji konfigurasi sendiri". Ini jelas tujuan dari tes dan menurut saya sangat valid. Saya bertanya kepada orang yang mengabaikan tes untuk menghapus konfigurasi structuremap untuk IEnvironmentRepository
(dengan tes masih diabaikan) dan menjalankan unit test unit lengkap, mereka semua lulus. Kami kemudian menjalankan aplikasi dan gagal karena konfigurasi kontainer sekarang tidak valid. Menurut pendapat saya, ini membuktikan nilai tes, kolega saya masih tidak setuju. Dia hanya menyatakan bahwa kita tidak boleh menguji konfigurasi, tetapi saya anggap ini baik dalam pengiriman unit test.
Jadi sejumlah pertanyaan;
- Apakah ini tes unit yang valid - Kami sedang menguji konfigurasi kontainer kami, bukan berarti structuremap berfungsi (tapi saya bisa melihat tumpang tindih)
- Jika tidak, bagaimana Anda bisa memvalidasi konfigurasi tanpa mengujinya. Bagaimana Anda bisa menghentikan seseorang secara tidak sengaja menghapus baris kode yang diperlukan dan memeriksanya?
- Haruskah
MyClass
unit test menyelesaikan instance dariIEnvironmentRepository
wadah dan meneruskannya?