首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python unittest框架中修改全局变量

在Python unittest框架中修改全局变量
EN

Stack Overflow用户
提问于 2011-06-08 00:10:19
回答 2查看 52.5K关注 0票数 51

我正在用Python进行一系列单元测试,其中一些依赖于配置变量的值。这些变量存储在全局Python配置文件中,并在其他模块中使用。我想为配置变量的不同值编写单元测试,但还没有找到这样做的方法。

我没有可能重写我正在测试的方法的签名。

这就是我想要实现的:

代码语言:javascript
复制
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")

谢谢。

编辑:使示例代码更加明确。

EN

回答 2

Stack Overflow用户

发布于 2016-01-06 18:37:48

您可能希望模拟这些全局变量。这样做的好处是,一旦完成,全局变量就会被重置。Python附带了一个模拟模块,可以让您做到这一点。

unittest.mock.patch可以用作装饰器:

代码语言:javascript
复制
class TestSomething(self.unittest):

    @patch('config.MY_CONFIG_VARIABLE', True)
    def test_first_case(self):
         self.assertEqual(my_function_with_global_var(), "First result")

您还可以将其用作上下文管理器:

代码语言:javascript
复制
    def test_first_case(self):
        with patch('config.MY_CONFIG_VARIABLE', True):
            self.assertEqual(my_function_with_global_var(), "First result")
票数 78
EN

Stack Overflow用户

发布于 2011-06-08 00:13:40

您的代码将MY_CONFIG_VARIABLE导入本地作用域,然后立即用不同的对象覆盖名称。这不会改变config模块中的值。试一试

代码语言:javascript
复制
import config
config.MY_CONFIG_VARIABLE = False

而不是。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6268278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档