Ini adalah perbedaan penting, tetapi sayangnya Anda tidak akan pernah menemukan kesepakatan. Masalahnya adalah kebanyakan pengembang menentukan ini dari sudut pandang mereka sendiri. Ini sangat mirip dengan perdebatan tentang Pluto. (Jika itu lebih dekat ke Matahari, apakah itu akan menjadi planet?)
Pengujian unit mudah untuk didefinisikan. Ini menguji CUT ( Code Under Test ) dan tidak ada yang lain. (Yah, sesedikit mungkin.) Itu berarti ejekan, palsu, dan perlengkapan.
Di ujung lain dari spektrum ada apa yang banyak orang sebut pengujian integrasi sistem . Itu menguji sebanyak mungkin, tetapi masih mencari bug di CUT Anda sendiri.
Tapi bagaimana dengan bentangan luas antara?
- Misalnya, bagaimana jika Anda menguji sedikit lebih banyak daripada CUT? Bagaimana jika Anda memasukkan fungsi Fibonacci, alih-alih menggunakan fixture yang telah Anda injeksi? Saya akan menyebutnya pengujian fungsional , tetapi dunia tidak setuju dengan saya.
- Bagaimana jika Anda memasukkan
time()
atau rand()
? Atau bagaimana jika Anda menelepon http://google.com
? Saya akan menyebutnya pengujian sistem , tetapi sekali lagi, saya sendirian.
Mengapa ini penting? Karena tes sistem tidak dapat diandalkan. Mereka memang diperlukan, tetapi terkadang mereka akan gagal karena alasan di luar kendali Anda. Di sisi lain, tes fungsional harus selalu lulus, bukan gagal secara acak; jika mereka cepat, mereka mungkin juga digunakan dari awal untuk menggunakan Pengembangan Didorong-Test tanpa menulis terlalu banyak tes untuk implementasi internal Anda. Dengan kata lain, saya pikir unit-test bisa lebih banyak masalah daripada nilainya, dan saya punya teman yang baik .
Saya melakukan tes pada 3 sumbu, dengan semua nolnya di unit-testing :
- Pengujian fungsional: menggunakan kode nyata lebih dalam dan lebih dalam di tumpukan panggilan Anda.
- Integrasi pengujian: lebih tinggi dan lebih tinggi up Anda panggilan-stack; dengan kata lain, menguji CUT Anda dengan menjalankan kode yang akan menggunakannya.
- Pengujian sistem: semakin banyak operasi yang tidak dapat diulang (penjadwal O / S, jam, jaringan, dll. )
Sebuah tes dapat dengan mudah menjadi 3, dengan berbagai tingkatan.