python中常量能修改吗_如何在python中修补常量

我的项目中有两个不同的模块.一个是包含的配置文件

LOGGING_ACTIVATED = False

这个常量用在第二个模块中(让我们称之为main),如下所示:

if LOGGING_ACTIVATED:

amqp_connector = Connector()

在我的主模块的测试类中,我想用该值修补此常量

True

不幸的是,以下不起作用

@patch("config.LOGGING_ACTIVATED", True)

这也不起作用:

@patch.object("config.LOGGING_ACTIVATED", True)

有人知道如何修补不同模块的常量吗?

解决方法:

如果if LOGGING_ACTIVATED:测试在模块级别进行,则需要确保该模块尚未先导入.模块级代码只运行一次(第一次将模块导入任何地方),您无法测试不会再次运行的代码.

如果测试在函数中,请注意使用的全局名称是LOGGING_ACTIVATED,而不是config.LOGGING_ACTIVATED.因此,您需要在此处修补main.LOGGING_ACTIVATED:

@patch("main.LOGGING_ACTIVATED", True)

因为这是你想要替换的实际参考.

您应该考虑将模块级代码重构为更可测试的代码.虽然您可以通过从sys.modules映射中删除模块对象来强制重新加载模块代码,但将要测试的代码移动到函数中会更简洁.

因此,如果您的代码现在看起来像这样:

if LOGGING_ACTIVATED:

amqp_connector = Connector()

考虑使用函数代替:

def main():

global amqp_connector

if LOGGING_ACTIVATED:

amqp_connector = Connector()

main()

或者生成具有属性的对象.

标签:python,unit-testing,mocking,testing,patch

来源: https://codeday.me/bug/20191002/1842320.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值