Haruskah saya memisahkan tes unit dan tes integrasi?

17

Saya harus menulis tes unit dan tes integrasi untuk sebuah proyek.

  • Haruskah semua tes dimasukkan ke dalam folder tes tunggal ?
  • Atau haruskah tes unit dan tes integrasi masing-masing berada di folder tes yang terpisah ?
  • Atau haruskah saya menempatkan mereka dalam proyek terpisah ?

Jika saya menyatukannya, apakah ada kelebihan atau kekurangan dengan pendekatan ini?

Ahmed Ragheb
sumber
1
Jika Anda beroperasi di lingkungan CI, yang penting adalah bahwa mereka dapat dengan mudah diidentifikasi (berdasarkan atribut dll) karena tes integrasi tidak selalu berjalan di server build.
Robbie Dee

Jawaban:

17

Secara umum: ya, Anda harus memasukkan tes integrasi dan tes unit ke folder yang berbeda. Seringkali, programmer tidak menarik garis yang jelas antara dua jenis tes ini dan hanya menulis jenis tes apa pun yang berguna. Tetapi tes integrasi cenderung lebih lambat, karena sering melibatkan:

  • Permintaan basis data
  • Permintaan jaringan
  • Perilaku tergantung waktu
  • Sejumlah besar data

Sebaliknya, tes unit akan mengejek operasi yang mahal, sehingga tes unit cenderung berjalan cepat (pada kenyataannya, bagian paling lambat dari menjalankan tes sering kerangka uji itu sendiri).

Ketika seorang programmer bekerja pada sistem mereka berada dalam siklus edit-tes. Semakin cepat mereka mendapatkan umpan balik pengujian dan semakin pendek siklusnya, semakin produktif mereka. Jadi di sana kami hanya ingin menjalankan tes penting yang selesai dengan cepat. Rangkaian uji lengkap hanya akan dieksekusi sebagai bagian dari proses QA, misalnya pada server CI.

Ini berarti bahwa suite uji besar harus dikategorikan. Bisakah kita hanya memilih tes unit untuk komponen tertentu? Bisakah kita mengecualikan tes lambat? Salah satu cara sederhana untuk melakukan ini adalah mempertahankan suite tes yang berbeda di direktori yang berbeda. Jika Anda hanya memiliki sedikit tes, satu direktori juga akan baik-baik saja selama seorang programmer dapat dengan mudah memilih subset tes.

Apa pun yang memungkinkan seorang programmer mendapatkan umpan balik dengan cepat adalah baik. Test suite paling komprehensif tidak masalah jika tidak dieksekusi secara teratur.

Bacaan lebih lanjut:

amon
sumber
Saat memisahkan folder, apakah Anda menyimpannya dalam paket yang sama dengan kode produksi (sehingga Anda dapat menguji metode yang dilindungi)? Contoh, Anda membuat modul pakar untuk tes unit dan modul pakar lain untuk tes integrasi. Seperti itu, Anda dapat memisahkannya dan masih mudah menguji metode yang dilindungi.
ihebiheb
@ihebiheb Di Jawa, menggunakan visibilitas paket cukup disukai. Dalam beberapa kasus dapat bermanfaat untuk menggunakannya dan mengakses API ini dari unit test. Tetapi secara umum, itu tidak perlu. Tes gaya integrasi tidak pernah membutuhkan akses ke anggota paket pribadi. Apakah atau tidak untuk menempatkan tes ke proyek Maven yang terpisah tergantung pada bagaimana Anda ingin menjalankan dan menggunakan mereka. Saya tidak suka ke Jawa / Maven untuk dapat memberi tahu Anda apa yang masuk akal di sini.
amon