Was ist in einem python unit test (eigentlich Django)) die richtige assert
Anweisung, die mir sagt, ob mein Testergebnis eine Zeichenfolge meiner Wahl enthält?
self.assertContainsTheString(result, {"car" : ["toyota","honda"]})
Ich möchte sicherstellen, dass mein result
mindestens das json-Objekt (oder den String) enthält, das ich als zweites Argument oben angegeben habe
{"car" : ["toyota","honda"]}
self.assertContains(result, "abcd")
Sie können es so ändern, dass es mit json funktioniert.
Verwenden self.assertContains
nur für HttpResponse
Objekte. Verwenden Sie für andere Objekte self.assertIn
.
Um festzustellen, ob eine Zeichenfolge eine Teilzeichenfolge einer anderen ist oder nicht, sollten Sie assertIn
und assertNotIn
verwenden:
# Passes
self.assertIn('bcd', 'abcde')
# AssertionError: 'bcd' unexpectedly found in 'abcde'
self.assertNotIn('bcd', 'abcde')
Diese sind neu seit Python 2.7 und Python 3.1
Mit einem einfachen assertTrue + in python Schlüsselwort:
self.assertTrue("expected_part_of_string" in my_longer_string)
Erstellen Sie ein JSON-Objekt mit json.dumps()
.
Dann vergleiche sie mit assertEqual(result, your_json_dict)
import json
expected_dict = {"car":["toyota", "honda"]}
expected_dict_json = json.dumps(expected_dict)
self.assertEqual(result, expected_dict_json)
Wie von Ed I erwähnt , assertIn
ist wahrscheinlich die einfachste Antwort, um eine Zeichenfolge in einer anderen zu finden. Die Frage lautet jedoch:
Ich möchte sicherstellen, dass mein
result
mindestens das json-Objekt (oder den String) enthält, das ich als zweites Argument oben angegeben habe, d. H.{"car" : ["toyota","honda"]}
Daher würde ich mehrere Behauptungen verwenden, damit hilfreiche Nachrichten bei Fehlern eingehen. Tests müssen in Zukunft verstanden und gepflegt werden, möglicherweise von jemandem, der sie ursprünglich nicht geschrieben hat. Angenommen, wir befinden uns in einem Django.test.TestCase
:
# Check that `car` is a key in `result`
self.assertIn('car', result)
# Compare the `car` to what's expected (assuming that order matters)
self.assertEqual(result['car'], ['toyota', 'honda'])
Das gibt hilfreiche Nachrichten wie folgt:
# If 'car' isn't in the result:
AssertionError: 'car' not found in {'context': ..., 'etc':... }
# If 'car' entry doesn't match:
AssertionError: Lists differ: ['toyota', 'honda'] != ['honda', 'volvo']
First differing element 0:
toyota
honda
- ['toyota', 'honda']
+ ['honda', 'volvo']