Apakah metode pengujian untuk menguji suatu fungsi dengan menguji suatu fungsi yang menyebutnya masih unit test?


11

Jika kita menguji fungsi B, dengan menguji fungsi C yang memanggil fungsi B, yaitu menulis program uji untuk menguji fungsi C yang memanggil fungsi B, apakah metode pengujian masih disebut unit test, atau yang lainnya?

Kapan lebih disukai untuk menguji secara tidak langsung pada fungsi yang memanggil fungsi target, dan kapan lebih disukai untuk menguji fungsi secara langsung?

Jawaban:


9

Definisi populer dari unit test adalah ISTQB:

Tes unit adalah bagian terkecil yang dapat diuji dari aplikasi seperti fungsi, kelas, prosedur, antarmuka. Pengujian unit adalah metode yang digunakan untuk menguji setiap unit kode sumber untuk menentukan apakah sesuai untuk digunakan.

Menurut definisi ini:

  • jika Anda menulis program uji untuk B, itu adalah unit test (B).
  • jika Anda menulis program uji untuk C, itu adalah unit test (C).

Sekarang bisa ada perbedaan antara niat dan ruang lingkup pengujian. Jika Anda menulis program pengujian untuk B dengan menggunakan C, itu masih merupakan unit test C, karena yang dapat Anda lakukan adalah memberikan input ke C dan memeriksa berdasarkan output jika B benar. Hanya saja Anda menyimpulkan bahwa B bekerja karena C bekerja.

Ada juga definisi tes integrasi :

Pengujian dilakukan untuk mengekspos kerusakan pada antarmuka dan interaksi antara komponen atau sistem terintegrasi.

Definisi komponen perangkat lunak yang biasa menyiratkan bahwa itu independen dan dapat digunakan sendiri. Di sini, B dan C tampaknya bukan komponen independen, jadi kami tidak memiliki tes integrasi.


5

Ini sangat tergantung pada apa yang Anda anggap unit. Jika Csangat sederhana sehingga pengujian secara terpisah tidak masuk akal, maka pengujian Anda adalah uji unit.

Jauh lebih penting adalah untuk rangkaian pengujian unit Anda untuk unit tertentu yang memiliki cakupan garis mendekati 100%, dan untuk menguji semua jalur kode yang secara praktis diantisipasi.


1

Ya, kami masih menyebutnya unit-test jika fungsi memanggil fungsi lain.

Unit-test harus menguji perilaku publik suatu kelas dan bukan implementasi pribadi. Seperti yang disarankan oleh pengujian Google ini pada artikel toilet .

Jika Anda mengikuti aturan Kode Bersih maka fungsi Anda tidak boleh lebih dari 4 baris kode. Ini membuatnya tidak mungkin untuk tidak menguji fungsi pribadi lain dengan unit-test Anda.

Mengapa Anda tidak harus menguji sebagian besar fungsi pribadi secara terpisah? Karena refactoring akan memaksa Anda terus memperbarui semua tes unit implementasi Anda. Ini akan menjadi frustasi ketika Anda memiliki banyak dari mereka, sementara perilaku publik tidak boleh berubah selama refactoring dan dengan demikian tes tidak perlu memperbarui. Anda harus dapat menguji privat dengan orang tua publik mereka. Kadang-kadang mungkin layak menguji privat yang kompleks, tetapi bertanya-tanya apakah mereka harus menjadi kelas tersendiri?

Tes integrasi :

Sekarang jika fungsinya adalah bagian dari kelas lain, itu berbeda. Kemudian kita akan menyebutnya pengujian komponen atau pengujian integrasi. Anda mengintegrasikan beberapa kelas dan menjalankan tes melawannya. Fungsi B akan bergantung pada Fungsi C. Untuk dapat melakukan unit-test Fungsi B Anda dapat menggunakan injeksi dependensi untuk mengisolasi fungsi yang Anda uji, sekarang akan menjadi unit-test lagi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.