Éliminer les bogues
--Travailler pour vérifier si cela fonctionne correctement
unittest
doctest
pytest
unittest
Tout d'abord, préparez la fonction calc.py à tester.
Ceci est une méthode pour ajouter et soustraire.
calc.py
def add_num(num1, num2):
    return num1 + num2
def sub_num(num1, num2):
    return num1 - num2
Puis testez calc.py avec ʻunit test`.
** 6 étapes pour écrire un programme de test **
test_calc.py
# 1.Le nom du fichier est "test"_Nom du module cible.py "
# 2.Importez le module unittest
import unittest
import calc
# 3.Le nom de la classe de test est "Nom de la classe cible du test"
# 4.La classe de test est unittest.Hériter TestCase
class TestCalc(unittest.TestCase):
    # 5.Le nom de la méthode de test est "test"_Le nom de la méthode à tester "
    def test_add_num(self):
        num1 = 10
        num2 = 5
        expected = 15
        actual = calc.add_num(num1, num2)
        #Assert Equal pour voir si vous obtenez les résultats souhaités()Méthode
        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()Exécutez le test sur
if __name__ == "__main__":
    unittest.main()
En l'exécutant avec l'option -v après le nom du fichier, des informations sur le contenu du test seront affichées.
Si le calcul est exécuté correctement, il réussit.
$ python test_calc.py -v
test_add_num (__main__.TestCalc) ... ok
test_div_num (__main__.TestCalc) ... ok
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
Les deux scripts cibles sont affichés comme ʻok, vous pouvez donc voir que le test a réussi.  Quand ʻunittest.main () est exécuté, toutes les classes qui héritent de ʻunittest.TestCase sont reconnues dans le script cible, et chaque méthode commençant par test` est exécutée comme cas de test.
Enfin, regardons le cas où le test échoue.
test_calc_1.py
# 1.Le nom du fichier est "test"_Nom du module cible.py "
# 2.Importez le module unittest
import unittest
import calc
# 3.Le nom de la classe de test est "Nom de la classe cible du test"
# 4.La classe de test est unittest.Hériter TestCase
class TestCalc(unittest.TestCase):
    # 5.Le nom de la méthode de test est "test"_Le nom de la méthode à tester "
    def test_add_num(self):
        num1 = 10
        num2 = 5
        expected = 15
        actual = calc.add_num(num1, num2)
        #Assert Equal pour voir si vous obtenez les résultats souhaités()Méthode
        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()Exécutez le test sur
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)
Il dit test_sub_num (__main__. TestCalc) ... FAIL, et il s'avère que le résultat de la soustraction est incorrect.
 et sum_num` (la partie entourée par '' '), décrivez l'appel de fonction et la valeur de sortie attendue au format du mode interactif Python.doctest.testmod ().Examinons d'abord le cas où il y a une erreur.
doc.py
class Keisan(object):
    def add_num(self, num1, num2):
        # 1.Décrire l'appel de fonction et la valeur de sortie attendue
        '''Ajouter des arguments
        >>> k = Keisan()
        >>> k.add_num(5, 5)
        10
        '''
        result = num1 + num2
        return result
    def sub_num(self, num1, num2):
        '''Soustraire des arguments
        >>> k = Keisan()
        >>> k.sub_num(5, 5)
        3
        '''
        result = num1 - num2
        return result
# 2.Importez le module doctest
# 3. doctest.testmod()Exécutez le test sur
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.
La valeur de sortie attendue est affichée dans Attendu et la valeur de sortie réelle est affichée dans Got. Vous pouvez voir que «Got: 0» est correct au lieu de «Attendu: 3».
Ensuite, regardons le cas où il n'y a pas d'erreur.
doc_1.py
class Keisan(object):
    def add_num(self, num1, num2):
        # 1.Décrire l'appel de fonction et la valeur de sortie attendue
        '''Ajouter des arguments
        >>> k = Keisan()
        >>> k.add_num(5, 5)
        10
        '''
        result = num1 + num2
        return result
    def sub_num(self, num1, num2):
        '''Soustraire des arguments
        >>> k = Keisan()
        >>> k.sub_num(5, 5)
        0
        '''
        result = num1 - num2
        return result
# 2.Importez le module doctest
# 3. doctest.testmod()Exécutez le test sur
if __name__ == '__main__':
    import doctest
    doctest.testmod()
$ python doc.py
Remplacement de «Attendu: 3» par «Attendu: 0». J'ai constaté que s'il n'y avait aucune erreur, rien n'était affiché.
Tout d'abord, installez pytest.
$ pip install pytest
Ensuite, préparez la fonction practice.py à tester.
Ceci est une méthode pour ajouter et soustraire.
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
Puis testez par rapport à «practice.py» en utilisant «pytest».
** 6 étapes pour écrire un programme de test **
test_practice.py
# 1.Le nom du fichier est "test"_Nom du module cible.py "
from practice import Practice
# 2.Le nom de la méthode de test est "test"_Le nom de la méthode à tester "
def test_add_num():
    # 3.Exécutez le test avec assert
    assert Practice(5, 5).add_num() == 10
def test_sub_num():
    assert Practice(5, 5).sub_num() == 10
Exécutez avec pytest devant le nom du fichier.
$ 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 ============================
Le bref résumé de test info FAILED indique test_practice.py :: test_sub_num --assert 0 == 10, indiquant que le résultat de la soustraction est incorrect.
Remplacez le résultat de la soustraction de «10» à «0» et vérifiez s'il n'y a pas d'erreur.
test_practice_1.py
# 1.Le nom du fichier est "test"_Nom du module cible.py "
from practice import Practice
# 2.Le nom de la méthode de test est "test"_Le nom de la méthode à tester "
def test_add_num():
    # 3.Exécutez le test avec assert
    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 =================================
C'est "2 passé en 0.03s", et vous pouvez voir que le résultat était correct.
Recommended Posts