Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python重新加载模块_Python_Testing - Fatal编程技术网

Python重新加载模块

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

我正在使用python的unittest框架为python模块编写单元测试

此模块在加载json文件时使用json文件进行一点“预处理”,因此具有以下功能:
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)