AssertRaises завершается ошибкой, хотя возбуждается исключение - PullRequest
8 голосов
/ 07 августа 2011

Я сталкиваюсь со следующей довольно странной проблемой:

Я занимаюсь разработкой приложения django, и в своем классе моделей я определяю исключение, которое должно вызываться при сбое проверки:

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)

Этот код вызывается из класса публикации в методе проверки:

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

В моем модульном тесте я создаю случай, когда должно быть сгенерировано исключение:

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

Создает следующий вывод:

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

Таким образом, похоже, что возникло исключение (что имеет место - я даже проверил его в интерактивном сеансе IPython), но кажется, что assertRaises его не перехватывает.

Кто-нибудь знает, почему это может произойти?

Спасибо

1 Ответ

6 голосов
/ 07 августа 2011

Это может произойти, если ваши тесты и код продукта импортируют ваш класс исключений по двум разным путям, поэтому asserRaises не осознает, что вы получили именно то исключение, которое искали.

Посмотрите наваш импорт, убедитесь, что они одинаковы в обоих местах.Это может сделать наличие в PYTHONPATH одинаковых каталогов двумя различными способами.Символические ссылки в этих записях также могут запутать вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...