[英]How to unit test using patch with a side effect with Pytest parametrize?
我正在嘗試測試我的函數,該函數接受 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
如何工作的信息可以在 mock docs 中找到。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.