[PYTHON] Schreiben Sie einen flexiblen Unit-Test mit PyHamcrest!

Einführung

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.

Wo assertEqual nicht verarbeiten kann

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.

schließlich

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!

Referenz

(1) Python unittest - asserting dictionary with lists (2) Python-Testcode zum Testen in kürzester Zeit (3) PyHamcrest (4) PyHamcrest Tutorial

Recommended Posts

Schreiben Sie einen flexiblen Unit-Test mit PyHamcrest!
Schreiben Sie einfach if-elif mit Lambda
Schreiben wir Python mitinema4d.
Schreiben Sie mit Python in csv
[Python] Mit Python in eine CSV-Datei schreiben
Schreiben Sie ein Restnetzwerk mit TFLearn
Schreiben Sie FW mit TWE-Lite R an TWE-Lite.
Schreiben Sie Reversi AI mit Keras + DQN
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Schreiben Sie ein Batch-Skript mit Python3.5 ~