Pada sebagian besar aplikasi saya, saya memiliki objek "config" tunggal atau statis, yang bertugas membaca berbagai pengaturan dari disk. Hampir semua kelas menggunakannya, untuk berbagai keperluan. Pada dasarnya itu hanya tabel hash dari pasangan nama / nilai. Ini hanya baca, jadi saya belum terlalu peduli dengan kenyataan bahwa saya memiliki begitu banyak negara global. Tapi sekarang saya mulai dengan pengujian unit, itu mulai menjadi masalah.
Satu masalah adalah bahwa Anda biasanya tidak ingin menguji dengan konfigurasi yang sama dengan yang Anda jalankan. Ada beberapa solusi untuk ini:
- Berikan objek konfigurasi setter yang HANYA digunakan untuk pengujian, sehingga Anda dapat lulus dalam pengaturan yang berbeda.
- Lanjutkan menggunakan objek konfigurasi tunggal, tetapi ubahlah dari satu singleton ke instance yang Anda berikan di mana-mana yang diperlukan. Kemudian Anda dapat membangunnya sekali dalam aplikasi Anda, dan sekali dalam pengujian Anda, dengan pengaturan yang berbeda.
Namun demikian, Anda masih memiliki masalah kedua: hampir semua kelas dapat menggunakan objek konfigurasi. Jadi dalam sebuah tes, Anda perlu mengatur konfigurasi untuk kelas yang diuji, tetapi juga SEMUA dependensinya. Ini dapat membuat kode pengujian Anda jelek.
Saya mulai sampai pada kesimpulan bahwa objek konfigurasi semacam ini adalah ide yang buruk. Apa yang kamu pikirkan? Apa saja alternatifnya? Dan bagaimana Anda memulai refactoring aplikasi yang menggunakan konfigurasi di mana-mana?