Fehler beseitigen
unittest
doctest
pytest
unittest
Bereiten Sie zunächst die zu testende Funktion calc.py
vor.
Dies ist eine Methode zum Addieren und Subtrahieren.
calc.py
def add_num(num1, num2):
return num1 + num2
def sub_num(num1, num2):
return num1 - num2
Dann teste calc.py
mit unittest
.
** 6 Schritte zum Schreiben eines Testprogramms **
unittest.main ()
aus.test_calc.py
# 1.Der Dateiname lautet "test"_Name des Zielmoduls.py "
# 2.Importieren Sie das unittest-Modul
import unittest
import calc
# 3.Der Name der Testklasse lautet "Name der Testzielklasse testen".
# 4.Die Testklasse ist unittest.TestCase erben
class TestCalc(unittest.TestCase):
# 5.Der Name der Testmethode lautet "test"._Der Name der zu testenden Methode "
def test_add_num(self):
num1 = 10
num2 = 5
expected = 15
actual = calc.add_num(num1, num2)
#Aktivieren Sie Gleich, um zu sehen, ob Sie die gewünschten Ergebnisse erzielen()Methode
self.assertEqual(expected, actual)
def test_sub_num(self):
num1 = 10
num2 = 5
expected = 5
actual = calc.sub_num(num1, num2)
self.assertEqual(expected, actual)
# 6. unittest.main()Führen Sie den Test weiter aus
if __name__ == "__main__":
unittest.main()
Wenn Sie es mit der Option -v nach dem Dateinamen ausführen, werden Informationen zum Testinhalt angezeigt. Wenn die Berechnung korrekt ausgeführt wird, ist sie erfolgreich.
$ python test_calc.py -v
test_add_num (__main__.TestCalc) ... ok
test_div_num (__main__.TestCalc) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
Beide Zielskripte werden als "OK" angezeigt, sodass Sie sehen können, dass der Test erfolgreich war. Wenn "unittest.main ()" ausgeführt wird, werden alle Klassen, die "unittest.TestCase" erben, im Zielskript erkannt, und jede Methode, die mit "test" beginnt, wird als Testfall ausgeführt.
Schauen wir uns zum Schluss den Fall an, in dem der Test fehlschlägt.
test_calc_1.py
# 1.Der Dateiname lautet "test"_Name des Zielmoduls.py "
# 2.Importieren Sie das unittest-Modul
import unittest
import calc
# 3.Der Name der Testklasse lautet "Name der Testzielklasse testen".
# 4.Die Testklasse ist unittest.TestCase erben
class TestCalc(unittest.TestCase):
# 5.Der Name der Testmethode lautet "test"._Der Name der zu testenden Methode "
def test_add_num(self):
num1 = 10
num2 = 5
expected = 15
actual = calc.add_num(num1, num2)
#Aktivieren Sie Gleich, um zu sehen, ob Sie die gewünschten Ergebnisse erzielen()Methode
self.assertEqual(expected, actual)
def test_sub_num(self):
num1 = 10
num2 = 5
expected = 6
actual = calc.sub_num(num1, num2)
self.assertEqual(expected, actual)
# 6. unittest.main()Führen Sie den Test weiter aus
if __name__ == "__main__":
unittest.main()
$ python test_calc.py -v
test_add_num (__main__.TestCalc) ... ok
test_sub_num (__main__.TestCalc) ... FAIL
======================================================================
FAIL: test_sub_num (__main__.TestCalc)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_calc.py", line 24, in test_sub_num
self.assertEqual(expected, actual)
AssertionError: 6 != 5
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
Es heißt test_sub_num (__main__. TestCalc) ... FAIL
und es stellt sich heraus, dass das Ergebnis der Subtraktion falsch ist.
add_num
und sum_num
den Funktionsaufruf und den erwarteten Ausgabewert im interaktiven Python-Modus (der von '' 'eingeschlossene Teil).doctest.testmod ()
aus.Schauen wir uns zunächst den Fall an, in dem ein Fehler vorliegt.
doc.py
class Keisan(object):
def add_num(self, num1, num2):
# 1.Beschreiben Sie den Funktionsaufruf und den erwarteten Ausgabewert
'''Argumente hinzufügen
>>> k = Keisan()
>>> k.add_num(5, 5)
10
'''
result = num1 + num2
return result
def sub_num(self, num1, num2):
'''Argumente subtrahieren
>>> k = Keisan()
>>> k.sub_num(5, 5)
3
'''
result = num1 - num2
return result
# 2.Importieren Sie das Doctest-Modul
# 3. doctest.testmod()Führen Sie den Test weiter aus
if __name__ == '__main__':
import doctest
doctest.testmod()
$ python doc.py
**********************************************************************
File "practice.py", line 15, in __main__.Keisan.sub_num
Failed example:
k.sub_num(5, 5)
Expected:
3
Got:
0
**********************************************************************
1 items had failures:
1 of 2 in __main__.Keisan.sub_num
***Test Failed*** 1 failures.
Der erwartete Ausgabewert wird in Erwartet und der tatsächliche Ausgabewert in Got angezeigt. Sie können sehen, dass "Got: 0" korrekt ist, anstatt "Expected: 3".
Schauen wir uns als nächstes den Fall an, in dem keine Fehler vorliegen.
doc_1.py
class Keisan(object):
def add_num(self, num1, num2):
# 1.Beschreiben Sie den Funktionsaufruf und den erwarteten Ausgabewert
'''Argumente hinzufügen
>>> k = Keisan()
>>> k.add_num(5, 5)
10
'''
result = num1 + num2
return result
def sub_num(self, num1, num2):
'''Argumente subtrahieren
>>> k = Keisan()
>>> k.sub_num(5, 5)
0
'''
result = num1 - num2
return result
# 2.Importieren Sie das Doctest-Modul
# 3. doctest.testmod()Führen Sie den Test weiter aus
if __name__ == '__main__':
import doctest
doctest.testmod()
$ python doc.py
Ersetzt "Erwartet: 3" durch "Erwartet: 0". Ich stellte fest, dass ohne Fehler nichts angezeigt wurde.
Installieren Sie zuerst pytest
.
$ pip install pytest
Bereiten Sie als nächstes die zu testende Funktion Practice.py
vor.
Dies ist eine Methode zum Addieren und Subtrahieren.
practice.py
class Practice(object):
def __init__(self, num1, num2):
self.num1 = num1
self.num2 = num2
def add_num(self):
return self.num1 + self.num2
def sub_num(self):
return self.num1 - self.num2
Testen Sie dann mit pytest
gegen Practice.py
.
** 6 Schritte zum Schreiben eines Testprogramms **
assert
aus.test_practice.py
# 1.Der Dateiname lautet "test"_Name des Zielmoduls.py "
from practice import Practice
# 2.Der Name der Testmethode lautet "test"._Der Name der zu testenden Methode "
def test_add_num():
# 3.Führen Sie den Test mit assert aus
assert Practice(5, 5).add_num() == 10
def test_sub_num():
assert Practice(5, 5).sub_num() == 10
Mit "pytest" vor dem Dateinamen ausführen.
$ pytest test_practice.py
=============================== test session starts ================================
platform win32 -- Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: C:\Users\Yusuke\Desktop\blog\test
collected 2 items
test_practice.py .F [100%]
===================================== FAILURES =====================================
___________________________________ test_sub_num ___________________________________
def test_sub_num():
> assert Practice(5, 5).sub_num() == 10
E assert 0 == 10
E + where 0 = <bound method Practice.sub_num of <practice.Practice object at
0x00000210F2B21070>>()
E + where <bound method Practice.sub_num of <practice.Practice object at 0x
00000210F2B21070>> = <practice.Practice object at 0x00000210F2B21070>.sub_num
E + where <practice.Practice object at 0x00000210F2B21070> = Practice(5,
5)
test_practice.py:7: AssertionError
============================= short test summary info ==============================
FAILED test_practice.py::test_sub_num - assert 0 == 10
=========================== 1 failed, 1 passed in 0.24s ============================
Die kurze Testzusammenfassungsinfo FAILED
gibt test_practice.py :: test_sub_num --assert 0 == 10
an, was anzeigt, dass das Ergebnis der Subtraktion falsch ist.
Ersetzen Sie das Ergebnis der Subtraktion von "10" auf "0" und prüfen Sie, ob keine Fehler vorliegen.
test_practice_1.py
# 1.Der Dateiname lautet "test"_Name des Zielmoduls.py "
from practice import Practice
# 2.Der Name der Testmethode lautet "test"._Der Name der zu testenden Methode "
def test_add_num():
# 3.Führen Sie den Test mit assert aus
assert Practice(5, 5).add_num() == 10
def test_sub_num():
assert Practice(5, 5).sub_num() == 0
$ pytest test_practice_1.py
=============================== test session starts ================================
platform win32 -- Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
rootdir: C:\Users\Yusuke\Desktop\blog\test
collected 2 items
test_practice.py .. [100%]
================================ 2 passed in 0.03s =================================
Es ist "2 in 0,03s bestanden", und Sie können sehen, dass das Ergebnis korrekt war.
Recommended Posts