Dans un python test unitaire (en réalité Django), quelle est la bonne déclaration assert
qui me dira si le résultat de mon test contient la chaîne de mon choix?
self.assertContainsTheString(result, {"car" : ["toyota","honda"]})
Je veux m'assurer que mon result
contient au moins l'objet json (ou chaîne) que j'ai spécifié comme second argument ci-dessus
{"car" : ["toyota","honda"]}
self.assertContains(result, "abcd")
Vous pouvez le modifier pour qu'il fonctionne avec JSON.
Utilisation self.assertContains
uniquement pour les objets HttpResponse
. Pour les autres objets, utilisez self.assertIn
.
Pour affirmer si une chaîne est ou non une sous-chaîne d'une autre, vous devez utiliser assertIn
et assertNotIn
:
# Passes
self.assertIn('bcd', 'abcde')
# AssertionError: 'bcd' unexpectedly found in 'abcde'
self.assertNotIn('bcd', 'abcde')
Celles-ci sont nouvelles depuis Python 2.7 et Python 3.1
Vous pouvez écrire une assertion sur la partie attendue d'une chaîne dans une autre chaîne avec un simple assertTrue + in python mot-clé:
self.assertTrue("expected_part_of_string" in my_longer_string)
Construisez un objet JSON en utilisant json.dumps()
.
Puis comparez-les en utilisant 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)
Comme mentionné par Ed I , assertIn
est probablement la réponse la plus simple pour trouver une chaîne dans une autre. Cependant, la question dit:
Je veux m'assurer que mon
result
contient au moins l'objet json (ou chaîne) que j'ai spécifié comme second argument ci-dessus, c'est-à-dire,{"car" : ["toyota","honda"]}
Par conséquent, j'utiliserais plusieurs assertions pour que les messages utiles soient reçus en cas d'échec - les tests devront être compris et conservés à l'avenir, potentiellement par quelqu'un qui ne les a pas écrits à l'origine. Par conséquent, en supposant que nous sommes à l'intérieur d'un 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'])
Ce qui donne des messages utiles comme suit:
# 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']