Beberapa waktu lalu saya membaca, pada jawaban Stack Overflow yang tidak dapat saya temukan, kalimat yang menjelaskan bahwa Anda harus menguji API publik, dan penulis mengatakan bahwa Anda harus menguji antarmuka. Penulis juga menjelaskan bahwa jika implementasi metode berubah, Anda tidak perlu memodifikasi kasus uji, karena melakukan ini akan memutus kontrak yang memastikan sistem yang sedang diuji berfungsi. Dengan kata lain, tes harus gagal jika metode tidak berhasil, tetapi bukan karena implementasinya berubah.
Ini menarik perhatian saya ketika kita berbicara tentang mengejek. Karena mengejek sangat bergantung pada panggilan ekspektasi dari sistem yang sedang diuji dependensi, tiruan sangat erat digabungkan dengan implementasi daripada antarmuka.
Ketika meneliti mock vs stub , beberapa artikel setuju bahwa stub harus digunakan sebagai ganti tiruan , karena mereka tidak bergantung pada ekspektasi dari dependensi, yang berarti tes tidak memerlukan pengetahuan tentang sistem yang mendasari dalam implementasi pengujian.
Pertanyaan saya adalah:
- Apakah mengolok-olok melanggar prinsip terbuka / tertutup?
- Apakah ada sesuatu yang hilang dalam argumen yang mendukung bertopik pada paragraf terakhir, yang membuat bertopik tidak begitu hebat vs mengejek?
- Jika demikian, kapan kasus penggunaan yang baik untuk mengejek dan kapan kasus penggunaan yang baik untuk menggunakan bertopik?
Since mocking relays heavily on expectation calls from system under test's dependencies...
Saya pikir ini adalah di mana Anda akan serba salah. Mock adalah representasi buatan dari sistem eksternal. Itu tidak mewakili sistem eksternal dengan cara apa pun, kecuali sejauh ia mensimulasikan sistem eksternal sedemikian rupa sehingga memungkinkan pengujian dijalankan terhadap kode yang memiliki ketergantungan pada sistem eksternal tersebut. Anda masih akan memerlukan tes integrasi untuk membuktikan bahwa kode Anda berfungsi dengan sistem yang nyata, yang tidak di-mocking.