É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