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 )
Bertentangan dengan jawaban ini , saya menemukan pengujian pada tingkat yang berbeda merupakan bagian penting dari proses pengujian perangkat lunak. Unit, fungsional, integrasi, asap, penerimaan, dan jenis pengujian lainnya menguji berbagai hal, dan semakin sering semakin meriah.
Dan jika Anda berhasil mengotomatisasi mereka, maka mereka dapat dieksekusi sebagai pekerjaan integrasi berkelanjutan Anda (seperti jenkins). Tidak ada yang perlu mengeksekusi mereka untuk melihat apakah mereka rusak, karena semua orang dapat melihat apakah tes gagal.
Dalam tes integrasi saya, saya tidak masuk ke detail - detail dan kasing sudut adalah untuk tes unit. Apa yang saya uji hanyalah fungsi utama, melewati semua parameter yang benar. Itu berarti, dalam contoh Anda, dalam tes integrasi, saya tidak akan menutupi jalur yang salah.
sumber