Je courais dans le problème suivant plutôt étrange:assertRaises échoue, même exception est levée
Je développe une application django et je suis en train de définir une exception qui devrait être soulevée dans mes modèles classe quand une validation échoue:
class MissingValueException(Exception):
"""Raise when a required attribute is missing."""
def __init__(self, message):
super(MissingValueException, self).__init__()
self.message = message
def __str__(self):
return repr(self.message)
Ce code est appelé d'une classe de publication dans une méthode de validation:
def validate_required_fields(self):
# Here is the validation code.
if all_fields_present:
return True
else:
raise MissingValueException(errors)
dans mon test unitaire je crée un cas où doit être soulevé l'exception:
def test_raise_exception_incomplete_publication(self):
publication = Publication(publication_type="book")
self.assertRaises(MissingValueException, publication.validate_required_fields)
Ceci produit la sortie suivante:
======================================================================
ERROR: test_raise_exception_incomplete_publication (core_knowledge_platform.core_web_service.tests.logic_tests.BusinessLogicTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/media/data/Dokumente/Code/master_project/core_knowledge_platform/../core_knowledge_platform/core_web_service/tests/logic_tests.py", line 45, in test_raise_exception_incomplete_publication
self.assertRaises(MissingValueException, method,)
File "/usr/lib/python2.7/unittest/case.py", line 465, in assertRaises
callableObj(*args, **kwargs)
File "/media/data/Dokumente/Code/master_project/core_knowledge_platform/../core_knowledge_platform/core_web_service/models.py", line 150, in validate_required_fields
raise MissingValueException(errors)
MissingValueException: 'Publication of type book is missing field publisherPublication of type book is missing field titlePublication of type book is missing field year'
Il semble donc que l'exception est soulevée (ce qui est le cas - j'ai même vérifié dans une session IPython interactive), mais il semble que assertRaises ne l'attrape pas.
Quelqu'un a une idée de ce qui pourrait arriver?
Merci
Oui, c'était le problème - l'exception déclenchée était:. .models.Exception Alors que le prévu était seulement: .models.Exception –
BergmannF
Eh ... J'ai ce problème avec un 'AssertionError' - J'utilise' self.assertRaises (AssertionError, ...) ', et il échoue toujours avec un' AssertionError'. Puisque c'est dans le noyau python, ceci ne peut pas être la réponse. D'autres possibilités? – naught101
Peu importe, c'était une erreur séparée. Leçon: Faites très attention aux numéros de ligne dans la sortie de test. – naught101