gpt4 book ai didi

python-3.x - 如何使用带有 Pytest 参数化副作用的补丁进行单元测试?

转载 作者:行者123 更新时间:2023-12-03 14:48:35 24 4
gpt4 key购买 nike

我正在尝试测试我的函数,该函数接受 3 个参数,并且还包含我试图模拟的另一个函数。问题是模拟不会循环通过副作用;我无法将要测试的第一组值(第一个参数化参数)与副作用中的第一个值“匹配”;第二组参数化参数与副作用中的第二个值,依此类推。

我尝试使用固定装置并使用参数化但无济于事。

测试代码

# I go through each set of values I want to test with a different expected output
@pytest.mark.parametrize('banner, year, month, expected', [
('ctr', 2019, 1, r'A\path\file.csv'),
('mks', 2019, 1, r'B\path\file.csv'),
('sc', 2019, 1, r'C\path\file.csv'),
('atm', 2019, 1, r'D\path\file.csv')
])
@mock.patch('import.path.to.function.path_formatting')
def test_files(mock_directory_path_banner, banner, year, month, expected):
# the mocked function always returns 'ctr'
mock_directory_path_banner.side_effect = ['ctr', 'mww', 'fgl', 'fgl']
result = get_loyalty_sales_files(banner, year, month)
assert expected == result

总共有四个测试。第一次通过,因为参数化测试使用来自模拟 (ctr) 的正确值。然而,其余的测试都失败了,因为没有为每个参数化测试调用一个新的模拟。我希望每次循环通过一组新的参数化值时都会调用一个新的模拟,但事实并非如此。

最佳答案

在带有 get_loyalty_sales_files 的文件中你有这样的东西

import path.to.function.path_formatting
不要在 @patch 中使用它,而是使用与本地导入模块相同的路径,然后附加要模拟的函数:
@patch('path.to.file.with.get_loyalty_sales_files.path_formatting')
更多信息 mock.patch可以找到作品 in the mock docs .

关于python-3.x - 如何使用带有 Pytest 参数化副作用的补丁进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57380926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com