Тестирование Django с assertRaises не может понять, что возникшее исключение является ожидаемым - PullRequest
2 голосов
/ 12 сентября 2011

У меня есть следующий фрагмент кода теста

with self.assertRaises(models.NotEnoughInventorySpace):
    self.inv2.add_item(self.item2, 1)

Тест не пройден:

Creating test database for alias 'default'...
E.
======================================================================
ERROR: test_limited_inventory (wotw_project.game.tests.TestInventory)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\...\wotw\wotw_project\..\wotw_project\game\tests.py", line 34, in test_limited_inventory
    self.inv2.add_item(self.item2, 1)
  File "D:\...\wotw\wotw_project\..\wotw_project\game\models.py", line 460, in add_item
    raise NotEnoughInventorySpace(self)
NotEnoughInventorySpace: There is not enough space in the inventory 'Inventory: 2'

----------------------------------------------------------------------
Ran 2 tests in 0.015s

FAILED (errors=1)
Destroying test database for alias 'default'...
Finished "D:\...\wotw\wotw_project\manage.py test game" execution.

Я не понимаю, почему возникшее исключение не идентично тому, которое я передаю assertRaises

Я запускаю код, используя manage.py test game с использованием файла tests.py рядом с моим models.py файлом в wotw_project.game.

Мое исследование этой проблемы показывает, что возможнобыть проблема с импортом (то есть. основной файл отличается от того же файла импортируется).Однако я использую стандартный метод для запуска unittest, поэтому я не понимаю, почему это проблема только для меня, наверняка другие люди использовали assertRaises с Django!

1 Ответ

0 голосов
/ 12 сентября 2011

Проблема не в assertRaises, проблема в том, что ваш класс исключений был импортирован не так, как в коде вашего продукта.

Дважды проверьте ваш импорт. Убедитесь, что имя импортировано из одного и того же модуля в обоих случаях. Часто в проектах Django один и тот же модуль импортируется под разными именами, например, потому что каталог доступен из двух записей в пути Python.

...