函数的猴子修补值

时间:2018-08-13 17:38:51

标签: python python-2.7 monkeypatching

我有一个小功能,如下:

def write_snapshot_backup_monitoring_values():
    try:
        snapshot_backup_result = 'my result'
        with open(config.MONITOR_SNAPSHOT_BACKUP_FILE, "w") as snapshot_backup_file:
            snapshot_backup_file.write(snapshot_backup_result)       
    except Exception as exception:
        LOG.exception(exception)

其中config.MONITOR_SNAPSHOT_BACKUP_FILE在配置文件中声明为值= /home/result.log

当我尝试使用pytest编写测试用例时,我按如下方式调用此函数:

constants.MONITOR_SNAPSHOT_BACKUP_FILE = "/tmp/result.log"

@pytest.mark.functional_test
def test_write_snapshot_backup_monitoring_values():
    utils.write_snapshot_backup_monitoring_values()...

我想用在测试用例文件中声明的config.MONITOR_SNAPSHOT_BACKUP_FILE来修补constants.MONITOR_SNAPSHOT_BACKUP_FILE的值。基本上,我希望在运行测试用例时,它应该创建/tmp/result.log而不是/home/result.log我该怎么做?我是python猴子修补的新手。

1 个答案:

答案 0 :(得分:1)

您无需清除config是什么,因此我认为它是您导入的另一个模块。猴子修补没有特定的技术,您只需分配值即可。它只是在运行时添加/修改属性的名称。

config.MONITOR_SNAPSHOT_BACKUP_FILE = constants.MONITOR_SNAPSHOT_BACKUP_FILE

但是,这里要记住一件事:Python缓存导入的模块。如果您更改此值,则对于已导入config并在同一运行时中运行的其他python模块,它将更改。因此,请注意不要引起任何副作用。