Python でテスト エンジンを開発していますが、モジュールの読み込みとグローバル関数に関するいくつかの問題に直面しています。
私が作成しているフレームワークの主なアイデアは、関数と注釈 "@thisisatest" を含む Python ファイルをロードして、どの関数がテストであるかを伝えることです。このファイルを imp.load_source でロードし、後で、ロードしたモジュールから関数を呼び出すスレッドを生成します。それは次のようなものです:
module = imp.load_source("test", "testdir/test.py")
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()
とにかく、このテストに「アサーション関数」を接続して、次のようなことをしたいと思います。
module = imp.load_source("test", "testdir/test.py")
module.__globals__.assertAndTerminate = assertionFunction
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()
そして、それは大丈夫です。問題は、test.py がその内部で assertAndTerminate 関数を使用する別のモジュールをインポートするときに始まります。test.py によってロードされたモジュールは、test.py の __globals__ をまったく認識しておらず、私が話している assertAndTerminate が誰であるかを知りません (各モジュールには独自の __globals__ があるため、これは理にかなっています)。
test.py モジュールとそれによってスレッドにロードされたモジュールに同じ assertAndTerminate 関数を設定する方法を知っている人はいますか? ツリーでインポートを検索したくないのですが、可能ですか?
のようなものはありThread(target=function, global_vars=["assertAndTerminate":assertionFunction])
ますか?