Perdebatan terbaru dalam tim saya membuat saya bertanya-tanya. Topik dasarnya adalah seberapa banyak dan apa yang akan kita bahas dengan tes fungsional / integrasi (tentu saja, tidak sama tetapi contohnya adalah tiruan di mana tidak penting).
Katakanlah Anda memiliki kelas "controller" seperti:
public class SomeController {
@Autowired Validator val;
@Autowired DataAccess da;
@Autowired SomeTransformer tr;
@Autowired Calculator calc;
public boolean doCheck(Input input) {
if (val.validate(input)) {
return false;
}
List<Stuff> stuffs = da.loadStuffs(input);
if (stuffs.isEmpty()) {
return false;
}
BusinessStuff businessStuff = tr.transform(stuffs);
if (null == businessStuff) {
return false;
}
return calc.check(businessStuff);
}
}
Kami membutuhkan banyak pengujian unit untuk memastikan (misalnya, jika validasi gagal, atau tidak ada data dalam DB, ...), itu tidak mungkin.
Masalah utama kami dan apa yang tidak kami setujui adalah seberapa banyak tes integrasi akan mencakupnya :-)
Saya berada di pihak yang kita akan bertujuan untuk tes integrasi kurang (test pyramid). Apa yang akan saya bahas dari ini hanyalah satu jalan bahagia-bahagia di mana eksekusi kembali dari baris terakhir, hanya untuk melihat apakah saya menyatukan hal-hal ini tidak akan meledak.
Masalahnya adalah tidak mudah untuk mengatakan mengapa tes menghasilkan false, dan itu membuat beberapa orang merasa tidak nyaman tentang hal itu (misalnya, jika kita hanya memeriksa hanya nilai pengembalian, disembunyikan bahwa tes berwarna hijau karena seseorang mengubah validasi dan mengembalikan false). Tentu, ya, kita bisa membahas semua kasus tetapi itu akan menjadi imho yang terlalu berat.
Apakah ada yang punya aturan praktis yang baik untuk masalah seperti ini? Atau rekomendasi? Bacaan? Berbicara? Posting blog? Ada topik apa saja?
Terima kasih banyak sebelumnya!
PS: Coba contoh jelek tapi cukup sulit untuk menerjemahkan bagian kode tertentu ke contoh. Ya, orang dapat berdebat tentang melempar pengecualian / menggunakan tipe pengembalian yang berbeda / dll. tetapi tangan kita lebih atau kurang terikat karena ketergantungan eksternal.
PS2: Saya memindahkan topik ini dari SO di sini (pertanyaan awal, ditandai ditahan )