4

テスト時に使用できない別のモジュールに依存する、テスト中のモジュールがあります。これを回避するために、私は(本質的に)次のように書きました:

import mock
import sys

sys.modules['parent_module.unavailable_module'] = mock.MagicMock()
import module_under_test

module_under_testこれは、次のいずれかを実行しているimport parent_module限り、正常に機能しますimport parent_module.unavailable_module。ただし、次のコードはトレースバックを生成します。

>>> from parent_module import unavailable_module
ImportError: cannot import name unavailable_module

これはどうしたの?このエラーを回避するために、テストコードで(importステートメントを変更せずに)何ができますか?

4

1 に答える 1

3

わかりました、私はそれを理解したと思います。声明では次のように見えます。

from parent_module import unavailable_module

Python は、 calledの属性を探します。したがって、次のセットアップ コードは内を完全に置き換えます。parent_moduleunavailable_moduleunavailable_moduleparent_module

import mock
import sys

fake_module = mock.MagicMock()
sys.modules['parent_module.unavailable_module'] = fake_module
setattr(parent_module, 'unavailable_module', fake_module)

私が認識している 4 つのインポート イディオムをテストしました。

import parent_module
import parent_module.unavailable_module
import parent_module.unavailable_module as unavailabe_module
from parent_module import unavailable_module

それぞれが上記のセットアップコードで動作しました。

于 2013-02-04T18:59:28.737 に答える