用assertRaises测试的Django没有意识到引发的异常是预期的

时间:2011-09-11 20:06:09

标签: python django python-2.7 django-testing django-1.3

我有以下测试代码段

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.pymodels.py文件旁边的wotw_project.game文件。

我对此问题的研究表明,导入可能存在问题(即文件与导入的同一文件不同)。但是我使用标准方法运行unittest所以我不明白为什么这只是我的问题,当然其他人已经使用了与Django的assertRaises!

1 个答案:

答案 0 :(得分:0)

问题不在于assertRaises,问题在于您的产品代码中的异常类的导入方式与测试代码中的异常类不同。

仔细检查您的进口。确保在两种情况下都从同一模块导入名称。在Django项目中,同一个模块通常可以通过不同的名称导入,例如,因为该目录可以从Python路径中的两个条目访问。