我正在用Python进行一系列单元测试,其中一些依赖于配置变量的值。这些变量存储在全局Python配置文件中,并在其他模块中使用。我想为配置变量的不同值编写单元测试,但还没有找到这样做的方法。
我没有可能重写我正在测试的方法的签名。
这就是我想要实现的:
from my_module import my_function_with_global_var
class TestSomething(self.unittest):
def test_first_case(self):
from config import MY_CONFIG_VARIABLE
MY_CONFIG_VARIABLE = True
self.assertEqual(my_function_with_global_var(), "First result")
def test_second_case(self):
from config import MY_CONFIG_VARIABLE
MY_CONFIG_VARIABLE = False
self.assertEqual(my_function_with_global_var(), "Second result")
谢谢。
编辑:使示例代码更加明确。
发布于 2016-01-06 18:37:48
您可能希望模拟这些全局变量。这样做的好处是,一旦完成,全局变量就会被重置。Python附带了一个模拟模块,可以让您做到这一点。
unittest.mock.patch
可以用作装饰器:
class TestSomething(self.unittest):
@patch('config.MY_CONFIG_VARIABLE', True)
def test_first_case(self):
self.assertEqual(my_function_with_global_var(), "First result")
您还可以将其用作上下文管理器:
def test_first_case(self):
with patch('config.MY_CONFIG_VARIABLE', True):
self.assertEqual(my_function_with_global_var(), "First result")
发布于 2011-06-08 00:13:40
您的代码将MY_CONFIG_VARIABLE
导入本地作用域,然后立即用不同的对象覆盖名称。这不会改变config
模块中的值。试一试
import config
config.MY_CONFIG_VARIABLE = False
而不是。
https://stackoverflow.com/questions/6268278
复制相似问题