Saya sedang berupaya membuat kelas saya dapat diuji unit, menggunakan injeksi ketergantungan. Tetapi beberapa dari kelas-kelas ini memiliki banyak klien, dan saya belum siap untuk refactor mereka semua untuk mulai melewati dependensi. Jadi saya mencoba melakukannya secara bertahap; menjaga dependensi default untuk saat ini, tetapi membiarkannya ditimpa untuk pengujian.
Satu pendekatan saya conisdering hanya memindahkan semua panggilan "baru" ke metode mereka sendiri, misalnya:
public MyObject createMyObject(args) {
return new MyObject(args);
}
Kemudian dalam unit test saya, saya bisa mensubkelaskan kelas ini, dan mengesampingkan fungsi create, jadi mereka malah membuat objek palsu.
Apakah ini pendekatan yang baik? Apakah ada kerugiannya?
Lebih umum, apakah boleh memiliki dependensi hard-coded, selama Anda dapat menggantinya untuk pengujian? Saya tahu pendekatan yang disukai adalah secara eksplisit mengharuskan mereka dalam konstruktor, dan saya ingin sampai di sana pada akhirnya. Tapi saya bertanya-tanya apakah ini langkah pertama yang baik.
Satu kekurangan yang baru saja terpikir oleh saya: jika Anda memiliki subclass nyata yang perlu Anda uji, Anda tidak dapat menggunakan kembali subclass tes yang Anda tulis untuk kelas induk. Anda harus membuat subclass tes untuk setiap subclass nyata, dan itu harus mengesampingkan fungsi create yang sama.