unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Unit Test

Unit Test #

Pengertian #

Unit testing adalah metode pengujian perangkat lunak di mana unit terkecil dari kode (biasanya fungsi atau metode) diuji secara individual. Python menyediakan modul unittest yang memungkinkan Anda menulis dan menjalankan tes otomatis. Berikut adalah penjelasan mendetail tentang fitur-fitur unittest di Python beserta contoh penggunaannya.

Fitur-fitur unittest #

  1. Test Case: Unit terkecil dari pengujian yang memverifikasi satu bagian spesifik dari kode. Ini ditulis sebagai metode dalam kelas yang merupakan subkelas dari unittest.TestCase.
  2. Test Suite: Kumpulan dari beberapa test case, test suite, atau keduanya.
  3. Test Runner: Komponen yang menjalankan test case atau test suite dan melaporkan hasilnya. unittest menyediakan runner bawaan, tetapi Anda bisa menggunakan runner pihak ketiga.
  4. Assertions: Metode untuk memverifikasi hasil pengujian. Jika assert tidak terpenuhi, pengujian gagal.
  5. Fixtures: Setup dan teardown yang dijalankan sebelum dan sesudah setiap test case atau suite. Mereka digunakan untuk menyiapkan lingkungan yang konsisten untuk pengujian.

Struktur Dasar #

  1. Membuat Subkelas dari unittest.TestCase: Ini adalah cara standar untuk menulis test case.
  2. Menambahkan Metode Tes: Metode ini harus dimulai dengan test_ agar dapat dikenali oleh framework unittest.
  3. Menjalankan Tes: Tes dapat dijalankan menggunakan runner bawaan seperti unittest.main().

Implementasi #

Unit Test #

import unittest

def add(a, b):
    return a + b

class TestMathOperations(unittest.TestCase):
    
    def test_add(self):
        self.assertEqual(add(1, 2), 3)
        self.assertEqual(add(-1, 1), 0)
        self.assertEqual(add(-1, -1), -2)

if __name__ == '__main__':
    unittest.main()

Penjelasan:

  • add(a, b): Fungsi sederhana yang akan diuji.
  • TestMathOperations: Kelas yang merupakan subkelas unittest.TestCase.
  • test_add: Metode pengujian yang memeriksa berbagai kasus untuk fungsi add.
  • unittest.main(): Menjalankan semua metode yang dimulai dengan test_.

Fixtures #

import unittest

class TestStringMethods(unittest.TestCase):
    
    def setUp(self):
        self.string = "hello world"
    
    def tearDown(self):
        del self.string
    
    def test_upper(self):
        self.assertEqual(self.string.upper(), "HELLO WORLD")
    
    def test_isupper(self):
        self.assertFalse(self.string.isupper())
        self.assertTrue("HELLO".isupper())

if __name__ == '__main__':
    unittest.main()

Penjelasan:

  • setUp: Metode ini dipanggil sebelum setiap metode pengujian. Di sini, variabel self.string diinisialisasi.
  • tearDown: Metode ini dipanggil setelah setiap metode pengujian. Di sini, variabel self.string dihapus.
  • test_upper dan test_isupper: Metode pengujian yang menggunakan self.string.

Mocking #

Mocking adalah teknik untuk menggantikan bagian dari kode dengan objek tiruan untuk mengisolasi unit yang diuji. Python menyediakan modul unittest.mock untuk keperluan ini.

import unittest
from unittest.mock import patch

def get_external_data():
    import requests
    response = requests.get('http://example.com/data')
    return response.json()

class TestExternalData(unittest.TestCase):
    
    @patch('requests.get')
    def test_get_external_data(self, mock_get):
        mock_get.return_value.json.return_value = {'key': 'value'}
        result = get_external_data()
        self.assertEqual(result, {'key': 'value'})

if __name__ == '__main__':
    unittest.main()

Penjelasan:

  • patch('requests.get'): Menggantikan fungsi requests.get dengan mock.
  • mock_get.return_value.json.return_value: Menentukan nilai yang dikembalikan oleh metode json() dari respons tiruan.
  • test_get_external_data: Metode pengujian yang memverifikasi bahwa fungsi get_external_data mengembalikan data yang diharapkan.

Kesimpulan #

Modul unittest di Python menyediakan cara yang kuat dan fleksibel untuk menulis dan menjalankan unit test. Fitur-fitur seperti test case, test suite, test runner, assertions, dan fixtures membuatnya sangat cocok untuk pengujian otomatis. Dengan menggunakan unittest, Anda dapat memastikan bahwa kode Anda berfungsi sebagaimana mestinya dan menangani berbagai kondisi dengan benar.

Menulis unit test juga membantu mendokumentasikan fungsionalitas kode Anda dan membuat refactoring menjadi lebih aman karena Anda dapat memastikan bahwa perubahan yang Anda buat tidak merusak fungsi yang sudah ada.

« Web Server
Mocking »