1. ホーム
  2. python

[解決済み] インポートをモック化する方法

2022-05-08 03:18:05

質問

モジュール A が含まれます。 import B を先頭にしています。しかし、テスト環境では、私は 模擬 BA (モック A.B をインポートすることは完全に控えてください。 B .

実際には B は、あえてテスト環境にはインストールされていません。

A はテスト中のユニットです。をインポートする必要があります。 A を、そのすべての機能とともに使用します。 B は、私がモックを作成する必要があるモジュールです。しかし、どのようにして B の中で A を停止し A をインポートすることで、本当の B は、もし、最初に A は、インポートする B ?

(Bがインストールされていない理由は、私は迅速なテストのためにpypyを使用しており、残念ながらBはまだpypyと互換性がないためです)。

これはどうしたらいいのでしょうか?

どのように解決するのですか?

に割り当てることができます。 sys.modules['B'] をインポートする前に A を使えば、欲しいものが手に入ります。

test.py :

import sys
sys.modules['B'] = __import__('mock_B')
import A

print(A.B.__name__)

A.py :

import B

B.pyが存在しないことに注意してください。 test.py はエラーを返さず print(A.B.__name__) を印刷します。 mock_B . それでも mock_B.py をモックにした B の実際の関数/変数/その他。あるいは、単に Mock() を直接指定します。

test.py :

import sys
sys.modules['B'] = Mock()
import A