Test Driven Development (TDD)

Setelah kita mengikuti tutorial mengenai pytest, mungkin timbul pertanyaan mengapa harus melakukan test?

Karena dengan memastikan setiap unit terkecil dari program berfungsi dengan baik, diharapkan program secara global tidak akan bermasalah. Konsep ini disebut TDD atau Test Driven Development.

Jadi tahap TDD secara garis besar adalah seperti berikut:

  1. Buat unit program
  2. Buat test function agar code pada unit program failed.
  3. Perbaiki code agar test function passed.
  4. Kembali ke langkah ke-2 hingga semua kemungkinan error bisa diatasi oleh unit program.

Mari kita buat contoh, misalnya kita akan membuat fungsi untuk mengubah string menjadi kapital.

import pytest

def kapital(mystr):
    return mystr.capitalize()

Pertama kita buat fungsi test, untuk memeriksa apakah fungsi kapital mengembalikan string dengan kapital pada awal kata.

import pytest

def kapital(mystr):
    return mystr.capitalize()

def test_1():
    assert kapital('skillplus') == 'Skillplus'

Bila pytest dijalankan, akan mengembalikan log seperti berikut. Dimana testing pertama berhasil, yaitu fungsi berhasil mengembalikan string menjadi huruf besar.

PS F:\Project\learnpytest> pytest -v  tdd.py
=========================== test session starts ===========================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\___\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 1 item

tdd.py::test_1 PASSED                                              [100%]

========================== 1 passed in 0.11s ============================

Selanjutnya mari kita test, bagaimana jika input fungsi adalah angka.

import pytest

def kapital(mystr):
    return mystr.capitalize()

def test_1():
    assert kapital('skillplus') == 'Skillplus'

def test_2():
    with pytest.raises(TypeError):
        kapital(1)

JIka pytest dijalankan maka akan terjadi failed test. Karena fungsi kapital tidak bisa menerima angka.

PS F:\Project\learnpytest> pytest -v  tdd.py
========================= test session starts ==========================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\____\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 2 items

tdd.py::test_1 PASSED                                              [ 50%] 
tdd.py::test_2 FAILED                                              [100%]

============================== FAILURES ==============================
_______________________________ test_2 _______________________________

    def test_2():
        with pytest.raises(TypeError):
>           kapital(1)

tdd.py:11:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

mystr = 1

    def kapital(mystr):
>       return mystr.capitalize()
E       AttributeError: 'int' object has no attribute 'capitalize'

tdd.py:4: AttributeError
========================== short test summary info =========================
FAILED tdd.py::test_2 - AttributeError: 'int' object has no attribute 'capitalize'
======================== 1 failed, 1 passed in 0.32s =======================

Langkah selanjutnya adalah perbaiki fungsi kapital, agar failed test diatas bisa menjadi passed test.

Pada fungsi, tambahkan perintah untuk memeriksa apakah mystr string atau bukan, jika bukan raise error.

import pytest

def kapital(mystr):
    if not isinstance(mystr, str):
        raise TypeError("Input harus tipe string")
        
    return mystr.capitalize()

def test_1():
    assert kapital('skillplus') == 'Skillplus'

def test_2():
    with pytest.raises(TypeError):
        kapital(1)

Jika kita jalankan pytest, maka function test dengan input angka akan passed. Yang berarti fungsi yang kita buat sudah dipastikan mengembalikan huruf besar, dan tidak terjadi error jika diisi dengan angka.

PS F:\Project\learnpytest> pytest -v tdd.py
=========================== test session starts ===========================
platform win32 -- Python 3.8.5, pytest-6.2.4, py-1.9.0, pluggy-0.13.1 -- c:\users\__\anaconda3\python.exe
cachedir: .pytest_cache
rootdir: F:\Project\learnpytest, configfile: pytest.ini
plugins: dash-1.19.0
collected 2 items

tdd.py::test_1 PASSED                                               [ 50%] 
tdd.py::test_2 PASSED                                               [100%] 

============================= 2 passed in 0.06s ===========================

Nah, semoga dengan pembahasan diatas, bisa dipahami mengapa kita melakukan proses testing.

Dengan berakhirnya modul ini, tutorial pytest telah selesai. Semoga bermanfaat.

Sharing is caring:

Leave a Comment