【发布时间】:2021-05-21 16:54:00
【问题描述】:
Related post on Mocking global variables
outgoing.py
table_data = []
def outgoing_data():
record = *do some stuff*
table_data.append(record)
在单元测试中,我想验证table_data 是否已更新。我尝试按照相关帖子中所示进行设置,但这似乎更旨在通过在补丁中设置其值来在函数内部使用该全局变量。我已经成功地用数据修补了全局变量,以便在其他方法中使用:@patch('outgoing.outgoing_data.table_data', [{'action_hist_id': 1, 'page_num': 1, 'row_num': 1}]) 作为装饰器。
我尝试了@patch('outgoing.outgoing_data.table_data', []),但没有按预期工作。我预计补丁会生成一个模拟,它可能是,但我无法在调试窗口中看到它以了解它是否被调用等。
如果问题不清楚或需要更多信息,请告诉我。提前致谢。
【问题讨论】:
-
我的建议:不要有全局变量。明确地将它传递给你的函数并从你的函数中返回它
-
outgoing.table_data是要修补的名称。函数outgoing.outgoing_data没有函数属性,因此创建一个函数不会使用的函数不会完成任何事情。 -
@PaulH 我试图避免重构代码,但这可能是要走的路。 @chepner 我可能输入了错误的示例代码。我的意图是打电话给
outgoing_data,然后测试它是否更新了table_data -
为了完整起见,我发布了我的问题的解决方案,但最后我按照@PaulH 的建议进行了重构
标签: python python-3.x python-unittest