Bagaimana Kontainer IoC dapat digunakan untuk pengujian unit? Apakah berguna untuk mengelola tiruan dalam solusi besar (50+ proyek) menggunakan IoC? Ada pengalaman? Pustaka C # apa saja yang bekerja dengan baik untuk menggunakannya dalam pengujian unit?
c#
unit-testing
mocking
inversion-of-control
crauscher
sumber
sumber
Jawaban:
Secara umum, DI Container tidak diperlukan untuk unit testing karena unit testing adalah tentang memisahkan tanggung jawab.
Pertimbangkan kelas yang menggunakan Pembuat Injeksi
Di seluruh aplikasi Anda, mungkin ada grafik ketergantungan besar yang tersembunyi di baliknya
IMyDependency
, tetapi dalam pengujian unit, Anda meratakan semuanya menjadi satu Tes Ganda .Anda dapat menggunakan tiruan dinamis seperti Moq atau RhinoMock untuk menghasilkan Test Double, tetapi itu tidak diperlukan.
Dalam beberapa kasus, container auto-mocking bagus untuk dimiliki, tetapi Anda tidak perlu menggunakan DI Container yang sama dengan yang digunakan aplikasi produksi.
sumber
IoC akan memberlakukan paradigma pemrograman yang akan membuat pengujian unit dalam isolasi (yaitu menggunakan tiruan) lebih mudah: penggunaan antarmuka, tidak ada yang baru (), tidak ada lajang ...
Tetapi menggunakan wadah IoC untuk pengujian sebenarnya bukan persyaratan, itu hanya akan menyediakan beberapa fasilitas misalnya injeksi tiruan tetapi Anda dapat melakukannya secara manual.
Saya tidak yakin apa yang Anda maksud dengan mengelola ejekan menggunakan IoC. Bagaimanapun, wadah IoC biasanya dapat melakukan lebih dari sekadar menyuntikkan tiruan ketika datang ke pengujian. Dan jika Anda memiliki dukungan IDE yang layak yang memungkinkan pemfaktoran ulang, mengapa tidak menggunakannya?
Ya, pada solusi besar, Anda membutuhkan lebih dari sebelumnya solusi yang tidak rawan kesalahan dan refactoring-merugikan (yaitu baik melalui wadah IoC yang aman atau dukungan IDE yang baik).
sumber
Saya sering menggunakan wadah IoC dalam pengujian saya. Memang, itu bukan "tes unit" dalam arti murni. IMO Mereka lebih BDDish dan memfasilitasi refactoring. Tes ada untuk memberi Anda kepercayaan diri untuk refactor. Tes yang ditulis dengan buruk bisa seperti menuangkan semen ke dalam kode Anda.
Pertimbangkan hal berikut:
Ada beberapa hal yang terjadi saat menambahkan gambar ke galeri. Gambar diubah ukurannya, thumbnail dibuat, dan file disimpan di AmazonS3. Dengan menggunakan wadah, saya dapat lebih mudah mengisolasi hanya perilaku yang ingin saya uji, yang dalam hal ini adalah bagian yang bertahan.
Ekstensi penampung tiruan otomatis berguna saat menggunakan teknik ini: http://www.agileatwork.com/auto-mocking-unity-container-extension/
sumber
Menggunakan kontainer dengan kemampuan untuk menyelesaikan layanan yang tidak terdaftar / tidak dikenal seperti SimpleInjector , DryIoc (tambangnya) dapat mengembalikan tiruan untuk antarmuka yang belum diimplementasikan.
Artinya, Anda dapat memulai pengembangan dengan implementasi sederhana pertama dan dependensi tiruannya, dan menggantinya dengan yang nyata saat Anda maju.
sumber