Tes negatif dasar

Di bagian pertama , kami mulai menulis fungsi faktorial dalam gaya yang digerakkan oleh pengujian. Kami bergantung pada pernyataan "menegaskan" yang sederhana untuk menjalankan pengujian kami dan kami mengakhirinya dengan ini:

def factorial(n):
    return n * factorial(n-1) if n else 1
assert factorial(0) == 1
assert factorial(2) == 2
assert factorial(5) == 120

>>> factorial(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "fac9.py", line 24, in factorial
    return n * factorial(n-1) if n else 1
  File "fac9.py", line 24, in factorial
    return n * factorial(n-1) if n else 1
  File "fac9.py", line 24, in factorial
    return n * factorial(n-1) if n else 1
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

Ketika kami menemukan bug, karena kami menulis tes terlebih dahulu, kami tidak memulai dengan memperbaiki bug. Sebagai gantinya, kita mulai dengan menulis tes yang mengekspos bug.

Di sini, kami lupa menguji "kasus negatif". "Pengujian negatif" adalah konsep yang licin, tetapi kurang lebih berarti menguji kesalahan.

Kami dapat berargumen bahwa kode kami saat ini berperilaku dengan benar: faktorial negatif tidak terdefinisi dengan baik sehingga melempar kesalahan adalah tepat. Namun kesalahan ini tidak membantu. Kita harus membuang kesalahan yang lebih informatif, sehingga penelepon dapat lebih memahami apa yang mereka lakukan salah.

Kami tidak dapat menulis pernyataan ini seperti yang lain: untuk menguji bahwa suatu fungsi melempar pengecualian, kami perlu menangkap pengecualian:

def factorial(n):
    return n * factorial(n-1) if n else 1
...
try:
    factorial(-1)
except:
    pass

$ python fac.py
$

Kita perlu menguji bahwa, ketika fungsi kita menimbulkan kesalahan, itu menimbulkan jenis kesalahan yang kita harapkan. ValueError adalah tipe bawaan yang sesuai di sini, jadi kami akan menambahkannya ke baris exception.

def factorial(n):
    return n * factorial(n-1) if n else 1
...
try:
    factorial(-1)
except ValueError as e:
    pass

$ python fac.py
Traceback (most recent call last):
  File "fac.py", line 28, in <module>
    factorial(-1)
  File "fac.py", line 23, in factorial
    return n * factorial(n-1) if n else 1
  File "fac.py", line 23, in factorial
    return n * factorial(n-1) if n else 1
  File "fac.py", line 23, in factorial
    return n * factorial(n-1) if n else 1
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

def factorial(n):
    if n < 0: return
    return n * factorial(n-1) if n else 1
...
try:
    factorial(-1)
except ValueError as e:
    pass

$ python fac.py
$

def factorial(n):
    if n < 0: return
    return n * factorial(n-1) if n else 1
...
try:
    factorial(-1)
    assert False, 'Factorial of < 0 should have raised an error'
except ValueError as e:
    pass

$ python fac.py
Traceback (most recent call last):
  ...
AssertionError: factorial of < 0 should have raised an error

def factorial(n):
    if n < 0:
        raise ValueError()
    return n * factorial(n-1) if n else 1
...
try:
    factorial(-1)
    assert False, 'Factorial of < 0 should have raised an error'
except ValueError as e:
    pass

def factorial(n):
    if n < 0:
        raise ValueError()
    return n * factorial(n-1) if n else 1
...
try:
    factorial(-1)
    assert False, 'Factorial of < 0 should have raised an error'
except ValueError as e:
    assert str(e) == 'Factorial of negative is undefined'

$ python fac.py
...
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "fac.py", line 19, in <module>
    assert str(e) == 'Factorial of negative is undefined'
AssertionError

Suggested posts

Mencari Informasi Tentang Nama Domain

Kutipan dari Alat Perangkat Lunak Kecil dan Tajam oleh Brian P. Hogan

Mencari Informasi Tentang Nama Domain

Saat Anda membuat permintaan ke facebook.com, komputer Anda mencari nama domain untuk menerjemahkan nama domain tersebut menjadi alamat IP sehingga komputer Anda dapat membuat koneksi tersebut.

Cara menjalankan plugin ChatGPT secara gratis menggunakan Langchain

Cara menjalankan plugin ChatGPT secara gratis menggunakan Langchain

Anda pasti pernah mendengar tentang semua plugin ChatGPT baru yang kuat seperti Browser, Code Interpreter, dll. Namun ada masalah, akses ke plugin terbatas pada daftar tunggu sehingga banyak yang tidak memiliki akses ke sana.

Related posts

Arsip Ancaman Itu: Vol 7 Black Basta

Arsip Ancaman Itu: Vol 7 Black Basta

Di dunia yang saling terhubung saat ini, ancaman serangan dunia maya lebih umum dari sebelumnya. Penjahat dunia maya dan aktor negara terus-menerus berusaha mengeksploitasi kerentanan dan mencuri data berharga, yang menimbulkan risiko signifikan bagi organisasi dari semua ukuran.

Dua tahun dalam desain- Yang baik, buruk, dan jelek…

Dua tahun dalam desain- Yang baik, buruk, dan jelek…

“Hai Siri, mainkan Me Dive oleh Olivia Dean.” Saat itu Mei 2021 ketika saya memulai magang di Future Academy Africa di Akure, Nigeria.

Jaringan TV Twitter

Jaringan TV Twitter

Apa yang lama sekarang menjadi baru lagi dan apa yang dulu berkilau berkilau sekarang terasa kusam. Saya tidak berbicara tentang jeans JNCO yang kembali populer di antara anak-anak keren di pusat kota bersama dengan mode akhir 1990-an lainnya.

3 Cara Terbukti untuk Meningkatkan Keterampilan Menulis Anda

Manfaat menulis, dan strategi untuk membantu Anda melakukannya

3 Cara Terbukti untuk Meningkatkan Keterampilan Menulis Anda

Di tahun 2022, dengan dirilisnya GPT-3, kemampuan menulis sepertinya menjadi kurang penting. Dengan AI, orang dengan tulisan yang buruk juga dapat menghasilkan staf yang berkualitas.