这将有点复杂,但请耐心等待。
我在重新加载时遇到了麻烦。我正在通过GUI在Python中运行单元测试,我希望能够对测试进行更改而不必重新启动应用程序。
为此,我正在尝试使用importlib.reload。但是,importlib.reload需要一个模块作为参数,我只能以字符串形式访问导入的模块名称。为了绕过这个问题,我尝试使用exec(),如下所示:
def loadSuite(testModules):
# Initialize the test suite
suite = unittest.TestSuite()
alreadyImported = sorted(sys.modules.keys())
# For the unit tests for each control module found in testModules
for t in testModules:
if t in alreadyImported:
exec("importlib.reload " + "(" + t + ")")
suite.addTests(unittest.defaultTestLoader.loadTestsFromName(t))
return suite
测试按应用程序划分在子目录中,如下所示:根程序目录\ Application1 \ Test1
如果重新加载的文件位于主文件夹中,我的方法似乎可以正常工作。问题出在这里:importlib.reload()有时在子目录上有问题。如果我尝试使用
t = "Application1.Test1"
exec("importlib.reload " + "(" + t + ")")
我懂了
NameError:名称“ Application1”未定义
这可能是因为它试图将Application1视为模块,并将Test1视为模块的一部分。然而!如果我直接在终端中运行相同的代码,它将起作用。
我什至从哪里开始尝试解决此问题?
您正在将每个名称与sys.modules中的键进行比较。但是该词典中的值是模块本身,您应该可以将其传递给reload()。
if t in alreadyImported:
importlib.reload(sys.modules[t])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句