2

次のテストコードスニペットがあります

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.pywotw_project.game

この問題を調査したところ、インポートに問題がある可能性があることがわかりました (つまり、メインファイルがインポートされた同じファイルとは異なる)。ただし、ユニットテストを実行するために標準的な方法を使用しているため、これが私だけの問題である理由がわかりません。他の人が Django で assertRaises を使用していることは確かです!

4

1 に答える 1

0

問題はにありません。問題はassertRaises、例外クラスがテストコードとは異なる方法で製品コードにインポートされていることです。

インポートを再確認してください。どちらの場合も、名前が同じモジュールからインポートされていることを確認してください。多くの場合、Djangoプロジェクトでは、同じモジュールを異なる名前でインポートできます。たとえば、Pythonパスの2つのエントリからディレクトリにアクセスできるためです。

于 2011-09-12T00:50:53.173 に答える