我们有一个中央模块,在模块内加载时调用一个 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)工作,但想知道是否有更好的解决方法,我可以在不中断所有现有脚本的情况下禁用该初始化调用。