2011-08-07 26 views
8

estoy corriendo en el siguiente lugar extraño problema:assertRaises errores incluso si la excepción se lanza

Estoy desarrollando una aplicación de Django y en mi clase de modelos estoy definiendo una excepción que debe plantearse cuando un error de validación:

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) 

Este código se llama desde una clase publicación en un método de validación:

def validate_required_fields(self): 
    # Here is the validation code. 
    if all_fields_present: 
     return True 
    else: 
     raise MissingValueException(errors) 

en mi unidad de prueba creo un caso en el que la excepción debe ser elevado:

def test_raise_exception_incomplete_publication(self): 
    publication = Publication(publication_type="book") 
    self.assertRaises(MissingValueException, publication.validate_required_fields) 

Esto produce el siguiente resultado:

====================================================================== 
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' 

Así que parece que se eleva la excepción (que es el caso - incluso he comprobado en una sesión IPython interactiva), pero parece que assertRaises no lo está atrapando

¿Alguien tiene alguna idea de por qué esto podría pasar?

Gracias

Respuesta

6

Esto podría ocurrir si sus pruebas y el código de producto están importando su clase de excepción a través de dos caminos diferentes, por lo asserRaises no se da cuenta de que la excepción se obtuvo fue la persona que estaba buscando.

Mire sus importaciones, asegúrese de que sean las mismas en ambos lugares. Tener los mismos directorios disponibles de dos maneras diferentes en su PYTHONPATH puede hacer que esto suceda. Los enlaces simbólicos en esas entradas también pueden confundir las cosas.

+0

Sí, ese era el problema: la excepción planteada era de: . .models.Exception Mientras que la espera fue solamente: .models.Exception – BergmannF

+0

Eh ... estoy teniendo este problema con un 'AssertionError' - Estoy usando' self.assertRaises (AssertionError, ...) ', y todavía está fallando con un' AssertionError'. Como eso está en el núcleo de Python, esta no puede ser la respuesta. ¿Alguna otra posibilidad? – naught101

+0

No importa, fue un error por separado. Lección: preste mucha atención a los números de línea en el resultado de falla de prueba. – naught101

Cuestiones relacionadas