Y a-t-il un type List dans le type Dict dans le test unitaire de python, et il réussit ou ne passe pas à chaque fois que vous testez? J'étais inquiet à ce sujet, alors je vais l'écrire ici. L'indice de la solution a été donné à partir de ce site (1). Je vous remercie.
Ici J'ai écrit le test suivant en référence à (2).
import unittest
class VTest(unittest.TestCase):
maxDiff = None
def setUp(self):
pass
def tearDown(self):
pass
def test_v(self):
first_json = {
'kind': 'voiceroid',
'items': [
{'name': 'aoi'},
{'name': 'akane'},
{'name': 'yukari'}
]
}
second_json = {
'kind': 'voiceroid',
'items': [
{'name': 'yukari'},
{'name': 'aoi'},
{'name': 'akane'},
]
}
self.assertEqual(first_json, second_json)
if __name__ == "__main__":
unittest.main()
Pour le moment, l'ordre des articles n'a pas d'importance - tant qu'il y a du contenu ... Donc, personnellement, c'est un test OK. Mais quand tu le bouges réellement
F
======================================================================
FAIL: test_v (__main__.VTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File ".\v_test.py", line 34, in test_v
self.assertEqual(first_json, second_json)
AssertionError: {'kin[20 chars]ems': [{'name': 'aoi'}, {'name': 'akane'}, {'name': 'yukari'}]} != {'kin[20 chars]ems': [{'name': 'yukari'}, {'name': 'aoi'}, {'name': 'akane'}]}
- {'items': [{'name': 'aoi'}, {'name': 'akane'}, {'name': 'yukari'}],
+ {'items': [{'name': 'yukari'}, {'name': 'aoi'}, {'name': 'akane'}],
'kind': 'voiceroid'}
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
Je me fâche comme ça. Non, personnellement ... je ne peux rien dire qui ne soit pas bon. C'est la «fonction assertEqual». Par conséquent, PyHamcrest (3) est une bibliothèque qui répond de manière flexible à la demande selon laquelle les valeurs sont importantes mais aucun ordre n'est requis. Parce que c'est une bibliothèque externe
pip install PyHamcrest
Après l'installation avec, réécrivez le code ci-dessus comme suit.
from hamcrest import *
import unittest
class VTest(unittest.TestCase):
maxDiff = None
def setUp(self):
pass
def tearDown(self):
pass
def test_v(self):
first_json = {
'kind': 'voiceroid',
'items': [
{'name': 'aoi'},
{'name': 'akane'},
{'name': 'yukari'}
]
}
second_json = {
'kind': 'voiceroid',
'items': [
{'name': 'yukari'},
{'name': 'aoi'},
{'name': 'akane'}
]
}
# self.assertEqual(first_json, second_json)
assert_that(first_json, second_json)
if __name__ == "__main__":
unittest.main()
Cela a juste changé la fonction assertEqual '' `` en
assert_that fonction` ``. Ensuite, quand je le teste ...
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Vous l'avez passé proprement.
Si vous êtes en difficulté parce que les éléments sont importants mais que l'ordre n'est pas si important, pourquoi ne pas essayer? Tutoriel PyHamcrest (4) est ici. Il y en a beaucoup, alors essayez-en d'autres. Je suis sûr que le test sera flexible!
(1) Python unittest - asserting dictionary with lists (2) Code de test Python à essayer dans les plus brefs délais (3) PyHamcrest (4) PyHamcrest Tutorial
Recommended Posts