Gibt es einen Listentyp im Dict-Typ im Unit-Test von Python, der bei jedem Test bestanden wird oder nicht? Ich habe mir darüber Sorgen gemacht, deshalb werde ich es hier aufschreiben. Der Hinweis auf die Lösung wurde von dieser Site (1) gegeben. Vielen Dank.
Hier Ich habe den folgenden Test unter Bezugnahme auf (2) geschrieben.
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()
Zu diesem Zeitpunkt spielt die Reihenfolge der Artikel keine Rolle - solange es Inhalte gibt ... Persönlich ist dies also ein Test in Ordnung. Aber wenn Sie es tatsächlich bewegen
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)
Ich werde so wütend.
Nein, persönlich ... Ich kann nichts sagen, was nicht gut ist. Das ist die `assertEqual-Funktion
``.
Daher ist PyHamcrest (3) eine Bibliothek, die flexibel auf die Anforderung reagiert, dass Werte wichtig sind, aber keine Reihenfolge erforderlich ist.
Weil es eine externe Bibliothek ist
pip install PyHamcrest
Schreiben Sie nach der Installation mit den obigen Code wie folgt neu.
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()
Dies hat gerade die `assertEqual-Funktion
in die
assert_that function`
geändert. Dann, wenn ich es teste ...
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Du hast es sauber bestanden.
Wenn Sie in Schwierigkeiten sind, weil die Elemente wichtig sind, die Reihenfolge jedoch nicht so wichtig ist, probieren Sie es aus. PyHamcrest Tutorial (4) ist da. Es gibt viele, also versuchen Sie es bitte mit anderen. Ich bin sicher, der Test wird flexibel sein!
(1) Python unittest - asserting dictionary with lists (2) Python-Testcode zum Testen in kürzester Zeit (3) PyHamcrest (4) PyHamcrest Tutorial
Recommended Posts