モジュール内でロード時に init() 関数を呼び出す中央モジュールがあります。
import x
import y
import z
def init():
....
init()
if __name__ == '__main__':
...
これは、次のようなステートメントですべてのアプリケーション モジュールに取り込まれます。
if __name__ == '__main__':
import central_module as b
b.do_this()
b.do_that()
init() は多くの悪いことを行いますが、特にデータベースへの接続を確立します。このため、単体テストが中断され、私が作成したモジュールは、モジュールをインポートして初期化を明示的に呼び出す通常の動作を想定しています。
一番上にINITIALIZE変数を追加することで回避策を実装しました:
#INITIALIZE = True
INITIALIZE = False # for DEV/test
if INITIALIZE:
init()
ただし、テストを実行したり開発を行ったりするためにそのファイルを編集し、コミットしてプッシュする準備ができたら変更を元に戻す必要があります。
政治的な理由から、私はそれを修正するだけでは何の牽引力も得ていません:
import central_module as b
...
b.init()
b.do_this()
b.do_that()
モジュールのロード時にその呼び出しをより透過的に無効にする方法はありますか? 問題は、モジュールがインポートされるまでに、すでにデータベースへの接続が試行されている (そして失敗している) ことです。
今のところ私の最善のアイデアは、INITIALIZE変数を以前のインポートに移動し、テストでそれをインポートし、初期化をFALSEに設定してからcentral_moduleをインポートすることです.
私は政治的な側面 (arg) に取り組み続けますが、既存のすべてのスクリプトを中断することなくその init 呼び出しを無効にするためのより良い回避策があるかどうか疑問に思っていました。