[PYTHON] [Memo] Zusammenfassung des Testcodes

Was ist der Zweck des Testcodes auf den Punkt gebracht?

Fehler beseitigen

Was ist ein Testcode?

Was passiert als Ergebnis des Testcodes?

Es gibt drei Bibliotheken, mit denen Sie Python testen können.

  1. unittest

  2. doctest

  3. pytest

  4. 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 **

  1. Der Dateiname lautet "test_target module name.py".
  2. Importieren Sie das unittest-Modul.
  3. Der Name der Testklasse lautet "Name der Testtestzielklasse".
  4. Die Testklasse erbt unittest.TestCase.
  5. Der Name der Testmethode lautet "Name der Zielmethode test_test".
  6. Führen Sie den Test mit 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.

Verweise

  1. doctest ** 3 Schritte zum Schreiben eines Testprogramms **
  2. Beschreiben Sie in den zu testenden Funktionen add_num und sum_num den Funktionsaufruf und den erwarteten Ausgabewert im interaktiven Python-Modus (der von '' 'eingeschlossene Teil).
  3. Importieren Sie das Doctest-Modul.
  4. Führen Sie den Test mit 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.

Verweise

  1. pytest

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 **

  1. Der Dateiname lautet "test_target module name.py".
  2. Der Name der Testmethode lautet "Name der Zielmethode test_test".
  3. Führen Sie den Test mit 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.

Verweise

Recommended Posts

[Memo] Zusammenfassung des Testcodes
Mit Codetest stärken ⑦
Mit Codetest stärken ⑤
Mit Codetest stärken ④
Mit Codetest stärken ①
Zusammenfassung der Testmethode
Mit Codetest stärken ⑧
Mit Codetest stärken ⑨
Adam Paper Zusammenfassung und Code
Testcode zur Bewertung von Dekorateuren
Python-Datentyp-Zusammenfassungsnotiz
[Notiz] Java FizzBuzz Code Golf
[Lernnotiz] Zusammenfassung des Django-Befehls
Prüfung
Schreiben Sie Selentestcode in Python
Beispielcode-Zusammenfassung für die parallele / parallele Python-Verarbeitung
[Test Driven Development (TDD)] Kapitel 21 Zusammenfassung
Ist es nicht in Ordnung, Testcode zu schreiben?
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
python setup.py testet den Code mit Multiprocess