私はdefenitionでエラーのある他のモジュールをインポートするモジュールを持っています。 テストする必要がありますが、インポートするとエラーが発生します。pythonでの偽の定義のテスト
私はpytest mockingを試みましたが、defenition後にオブジェクトにパッチを当てました。
私はdefenitionでエラーのある他のモジュールをインポートするモジュールを持っています。 テストする必要がありますが、インポートするとエラーが発生します。pythonでの偽の定義のテスト
私はpytest mockingを試みましたが、defenition後にオブジェクトにパッチを当てました。
あなたは間違ったやり方をしようとしているように聞こえますが、とにかくそれをやり遂げる方法があります。テスト環境でインポート中にサブモジュールが失敗した場合、インポートを実行する前に偽のモジュールをsys.modules
にロードすることができます。そうすれば、サブモジュールは既にロードされており、実際のサブモジュールをインポートしようとはしません。
私は構文エラーでモジュールを作成:
# broken.py
def disembodied_function():
その後、私はbroken.py
をインポートbar.py
を書きました。
# bar.py
from broken import disembodied_function
def do_bar():
return disembodied_function()
およびfoo.py
をインポートします。私はpython3 foo.py
を実行する場合
# foo.py
from bar import do_bar
print(do_bar())
は今、私はSyntaxError
を取得します。これを回避するには
$ python3 foo.py
Traceback (most recent call last):
File "foo.py", line 3, in <module>
from bar import do_bar
File "/home/don/workspace/scratch/bar.py", line 3, in <module>
from broken import disembodied_function
File "/home/don/workspace/scratch/broken.py", line 3
def disembodied_function():
^
SyntaxError: unexpected EOF while parsing
$
私はbar
をインポートする前に、私はbroken
モジュールの偽のバージョンを挿入することができます。
# foo2.py
import imp
import sys
mock_broken = imp.new_module('broken')
mock_broken.disembodied_function = lambda: 42
sys.modules['broken'] = mock_broken
from bar import do_bar
print(do_bar())
今では文句なしbar
をインポートすることができ、そしてそれはbroken
の偽のバージョンを呼び出します。ここではfoo.py
の新バージョンです。
$ python3 foo2.py
42
$
トレースバックを追加できますか? – AndMar
インポートするモジュールに再帰インポートがあります。再帰の反復の1つに「undefied」エラーがあります。 – Dan