Saat ini ada perdebatan di tim kami mengenai apakah memodifikasi desain kode untuk memungkinkan pengujian unit adalah bau kode, atau sejauh mana hal itu dapat dilakukan tanpa menjadi bau kode. Ini terjadi karena kami baru saja mulai menerapkan praktik yang ada di hampir setiap perusahaan pengembang perangkat lunak lainnya.
Secara khusus, kami akan memiliki layanan API Web yang akan sangat tipis. Tanggung jawab utamanya adalah menyusun permintaan / tanggapan web dan memanggil API yang mendasari yang berisi logika bisnis.
Salah satu contoh adalah bahwa kami berencana membuat pabrik yang akan mengembalikan jenis metode otentikasi. Kami tidak memerlukannya untuk mewarisi antarmuka karena kami tidak mengantisipasinya selain jenis konkretnya. Namun, untuk menguji unit layanan Web API kita perlu mengejek pabrik ini.
Ini pada dasarnya berarti kita merancang kelas pengontrol API Web untuk menerima DI (melalui konstruktor atau setternya), yang berarti kita sedang merancang bagian dari pengontrol hanya untuk memungkinkan DI dan mengimplementasikan antarmuka yang tidak kita perlukan, atau kita menggunakan kerangka kerja pihak ketiga seperti Ninject untuk menghindari keharusan mendesain controller dengan cara ini, tetapi kita masih harus membuat antarmuka.
Beberapa anggota tim tampaknya enggan mendesain kode hanya untuk kepentingan pengujian. Tampaknya bagi saya bahwa harus ada kompromi jika Anda berharap untuk unit test, tapi saya tidak yakin bagaimana menghilangkan kekhawatiran mereka.
Untuk lebih jelasnya, ini adalah proyek baru, jadi ini bukan tentang memodifikasi kode untuk mengaktifkan pengujian unit; ini tentang mendesain kode yang akan kita tulis agar unit dapat diuji.