Python重新加载模块
我正在使用python的unittest框架为python模块编写单元测试 此模块在加载json文件时使用json文件进行一点“预处理”,因此具有以下功能:Python重新加载模块,python,testing,Python,Testing,我正在使用python的unittest框架为python模块编写单元测试 此模块在加载json文件时使用json文件进行一点“预处理”,因此具有以下功能: module.info['xyz']可以访问和使用的 在为此编写测试时,我希望在每次测试之前重新加载模块,以便在每次测试开始之前,字典module.info的旧键不再存在 现在我在setUp()中有一个reload(module),但这似乎不起作用。在其他测试中,如test\u B和test\u C之后执行的测试中,我仍然会使用test\u
module.info['xyz']
可以访问和使用的
在为此编写测试时,我希望在每次测试之前重新加载模块,以便在每次测试开始之前,字典module.info
的旧键不再存在
现在我在setUp()
中有一个reload(module)
,但这似乎不起作用。在其他测试中,如test\u B
和test\u C
之后执行的测试中,我仍然会使用test\u A
引入的旧键
我想知道是否有办法实现我试图实现的目标,或者您是否可以向我指出无法实现的文档。手动从
sys.modules
字典中删除模块似乎对我有用
import sys
import unittest
import myModule
class MyTest( unittest.TestCase ):
def setUp( self ):
global myModule
myModule = __import__( 'path.to.myModule', globals(), locals(), [''], -1 )
return
def tearDown( self ):
global myModule
del sys.modules[myModule.__name__]
return
请查看此处的讨论@MaximKhesin在发布此问题之前,我已经讨论了这个问题,您认为讨论的哪一部分回答了我的问题?为什么您要在
setUp()
中使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?如果这是为了在全局名称空间中维护myModule
,是否有一种更简单的方法不需要知道如何使用\uuuu import\uuuu()
?此外,对设置和拆卸的返回调用是多余的。方法和函数有一个隐含的returnnone
,如果执行结束时没有调用return
。我使用\uuuuu import\uuu()
是因为它接受可以在运行时提供的字符串变量。return
调用是多余的,但我喜欢将它们用作函数结束时的视觉提示。在python3中,您可以简单地执行以下操作,而不是del sys.modules[myModule.\uuuu name\uuuu]
:重载(myModule)
importlib.reload(myModule)