Django测试中的assertRaises未能识别到抛出的异常是预期的
我有以下的测试代码片段:
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
来运行代码,这个命令会使用在 wotw_project.game
目录下,和我的 models.py
文件在一起的 tests.py
文件。
我对这个问题的研究显示,可能是导入的文件有问题(也就是说,主 文件和导入的文件不一样)。不过我用的是标准的方法来运行单元测试,所以我不明白为什么只有我会遇到这个问题,肯定还有其他人也在 Django 中使用过 assertRaises!
1 个回答
-1
问题不在于 assertRaises
,而是你的异常类在产品代码和测试代码中的导入方式不一样。
仔细检查一下你的导入语句。确保在这两种情况下,导入的名字来自同一个模块。在Django项目中,常常会出现同一个模块可以通过不同的名字导入的情况,比如因为这个目录可以通过Python路径中的两个入口访问。