Kelas saya mengikuti struktur ini
- Tingkat Layanan (membuat dan memetakan InputDTO ke Data DB)
- DAO Tier (sebenarnya mengeksekusi panggilan DB)
Ketika saya menulis tes tingkat layanan JUnit, tingkat DAO dipanggil, dan ini mengharapkan koneksi DB yang sebenarnya dan mendapatkan data dari DB.
Haruskah saya mengejek tingkat DAO sepenuhnya dari tingkat layanan, atau haruskah saya mengejek koneksi DB dan data yang diterima dari DB?
Kedua, aplikasi mengharapkan data tertentu dari cache.
Untuk waktu menjalankan JUnit, tidak ada cache, jadi bagaimana ini harus ditangani? Metode tingkat layanan termasuk mencari cache untuk mendapatkan detailnya.
sumber
Secara abstrak jawabannya cukup sederhana.
Anda memiliki tiga lapisan.
[Kasus tes] -> [Perilaku yang diuji] -> [Kolaborator digunakan oleh perilaku itu]
Lapisan ketiga inilah yang harus diejek. Sebagai contoh:
PokemonCaptureServiceTest
;PokemonCaptureService
;Pokeball
Dalam contoh ini ternyata itu
Pokeball
adalah logika pihak ketiga. Ini membutuhkan semua jenis pipa seperti koneksi database dan file properti dll. Anda percaya pihak ketiga Anda telah mengujinya dengan tepat, jadi Anda ingin menghilangkannya dari pengujian AndaPokemonCaptureService
. Karena itu harus diejek.Namun, di waktu dan tempat lain, kolaborator
Pokeball
adalah kelas sederhana yang memperkenalkan sangat sedikit kerumitan ke dalam kasus uji dan dapat dimasukkan dalam tes dengan mudah. Dalam hal ini Anda mungkin memutuskan untuk memasukkan contoh nyataPokeball
dalamPokemonCaptureService
contoh yang diuji.Tidak ada aturan yang keras dan cepat. Terserah Anda untuk merancang tes Anda dengan cara yang tampaknya terbaik bagi Anda. Tujuan Anda adalah untuk membuat tes yang benar dan dapat dipertahankan secepat mungkin. Pengalaman adalah kunci di sini. Tulis lebih banyak tes & Anda akan segera mendapatkan intuisi yang bagus untuk itu.
sumber
Sulit untuk mengatakan apa sebenarnya yang ingin Anda uji karena menilai dari pertanyaan Anda ada di mana-mana. Jadi sulit untuk memberi Anda contoh praktis tentang cara melanjutkan selain mengarahkan Anda ke artikel tentang cara mengejek barang. Jadi, Anda harus lebih spesifik dan sedikit membagi:
Apakah Anda ingin menguji agar cache berfungsi dengan baik?
Apakah Anda ingin menguji beberapa panggilan DB khususnya?
Apakah Anda ingin menguji aplikasi sehingga menggunakan cache dengan benar?
Setelah Anda memutuskan dengan tepat apa unit yang ingin Anda uji, kemudian memilih apa yang akan diejek menjadi mudah: dalam tes unit murni, segala sesuatu kecuali "unit yang diuji" harus diejek. Alasan di balik ini adalah bahwa Anda dapat yakin dari harapan set up Anda pada mengejek bahwa unit yang diuji bekerja sebagaimana mestinya.
Selain itu, Anda mungkin ingin menulis beberapa tes dalam JUnit yang merupakan tes integrasi, yaitu menggunakan lebih sedikit mengejek. Bahkan jika mereka digunakan sebagai pemeriksaan kewarasan untuk melihat apakah desain perangkat lunak sudah benar, Anda harus menyadari bahwa mereka akan rapuh dan tidak akan selalu memberikan indikator apa pun tentang apa yang sebenarnya salah dengan aplikasi atau sistem Anda.
sumber