我的项目中有两个不同的模块。一个是配置文件,其中包含
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
:因为那是你想要取代的真正的参考。
另请参阅
mock
文档的Where to patch section。您应该考虑将模块级代码重构为更易于测试的代码。尽管您可以通过从
sys.modules
映射中删除模块对象来强制重新加载模块代码,但将希望可测试的代码移到函数中则更为简单。如果你的代码现在看起来像这样:
考虑改用函数:
或者生成具有属性的对象。
相关问题 更多 >
编程相关推荐