Terjemahan artikel disiapkan khusus untuk siswa kursus Python QA Engineer .
Pengujian kode unit merupakan bagian integral dari siklus hidup pengembangan perangkat lunak. Tes unit juga membentuk dasar untuk melakukan pengujian regresi, yaitu, mereka menjamin bahwa sistem akan berperilaku sesuai dengan skenario ketika fitur baru ditambahkan atau yang sudah ada berubah.
Pada artikel ini, saya akan menunjukkan ide dasar pengujian unit dalam satu kelas. Dalam praktiknya, Anda harus menulis banyak test case, menambahkannya ke test suite, dan menjalankan semuanya. Manajemen kasus uji akan dibahas dalam artikel berikutnya.
Hari ini kita akan fokus pada pengujian backend. Artinya, pengembang telah mengimplementasikan beberapa proyek sesuai dengan spesifikasi (misalnya, Calculator.py), dan tugas Anda adalah memastikan bahwa kode yang dikembangkan benar-benar cocok dengan mereka (misalnya, menggunakan
TestCalculator.py
).
Misalkan Anda menulis kelas Kalkulator untuk melakukan fungsi komputasi dasar: penjumlahan, pengurangan, perkalian, dan pembagian.
Kode untuk ini ada di sini (
Calculator.py
):
Sekarang saya ingin menjalankan unit test untuk memahami bahwa fungsi di kelas di atas berfungsi seperti yang direncanakan.
Python biasanya datang dengan paket
unittest
. Jika tidak ada di sistem Anda, gunakan pip untuk menginstalnya.
Tes unit memiliki struktur berikut:

setUp()
dan
tearDown()
adalah metode standar yang datang dengan kerangka kerja unittest (mereka didefinisikan dalam kelas unittest.TestCase). Tergantung pada kasus pengujian Anda, Anda dapat menimpa atau tidak menimpa kedua metode ini secara default.
Saatnya untuk melihat kode kasus uji. Ini file
TestCalculator.py
.
import unittest from Calculator import Calculator
Meskipun ini tidak perlu, tetapi sebagai aturan saya memanggil kelas uji dengan Uji awalan (dalam kasus kami TestCalculator). Persyaratan utama di kelas ini adalah keberadaan superclass
unittest.TestCase
.
Setiap kali test case ini dijalankan, metode setUp () dijalankan terlebih dahulu. Dalam kasus kami, kami cukup membuat objek Kalkulator kelas dan menyimpannya sebagai atribut kelas. Ada beberapa metode standar lain di kelas induk, yang akan kita bahas nanti.
Untuk saat ini, semua yang akan Anda lakukan adalah menulis metode
test_xxx
untuk menguji setiap metode di kelas Kalkulator. Harap dicatat bahwa semua metode pengujian dimulai dengan awalan
test_
. Ini memberitahu Python menggunakan kerangka kerja unittest bahwa ini adalah metode pengujian.
Di setiap metode pengujian, saya menggunakan metode
assertEqual
untuk memeriksa apakah metode kalkulator mengembalikan nilai yang diharapkan. Jika nilai kembali sama dengan nilai yang diharapkan, maka tes berhasil, jika tidak maka gagal.
Ada banyak metode
assert
yang akan kita bicarakan nanti.
Baris terakhir dalam kode di atas hanya meluncurkan
TestCalculator
test case. Ini mengeksekusi setiap metode pengujian yang didefinisikan di dalam kelas dan mengembalikan hasilnya.
python TestCalculator.py -v
Anda akan melihat kesimpulan yang mirip dengan yang berikut:
test_add (__main__.TestCalculator) ... ok test_divide (__main__.TestCalculator) ... ok test_multiply (__main__.TestCalculator) ... ok test_subtract (__main__.TestCalculator) ... ok -------------------------------------------------------------------- Ran 4 tests in 0.000s OK
Bagaimana jika sesuatu tidak berfungsi seperti yang diharapkan? Mari kita ubah nilai yang diharapkan dari
test_divide
dari 5 menjadi 6 (5 adalah nilai yang benar, sekarang kita akan melihat apa yang terjadi jika gagal. Ini bukan kesalahan dalam kode sumber, tetapi kesalahan di suite tes, Anda mungkin juga memiliki kesalahan dalam suite tes, jadi selalu periksa skrip pengujian untuk kesalahan!)
import unittest from Calculator import Calculator
Ketika Anda menjalankan test case ini, Anda akan mendapatkan hasil berikut:
test_add (__main__.TestCalculator) ... ok test_divide (__main__.TestCalculator) ... FAIL test_multiply (__main__.TestCalculator) ... ok test_subtract (__main__.TestCalculator) ... ok ==================================================================== FAIL: test_divide (__main__.TestCalculator) -------------------------------------------------------------------- Traceback (most recent call last): File "TestCalculator.py", line 23, in test_divide self.assertEqual(self.calculator.divide(10,2), 6) AssertionError: 5.0 != 6 -------------------------------------------------------------------- Ran 4 tests in 0.001s FAILED (failures=1)
Dikatakan di sini bahwa 3 dari 4 tes berhasil, tetapi satu gagal. Dalam skenario nyata, diasumsikan bahwa test case Anda benar, yaitu, dengan cara ini membantu mengidentifikasi fungsi yang tidak diterapkan dengan benar.