首页 > 解决方案 > python用不同的参数模拟一个函数并用返回值断言

问题描述

这可能是一个简单的问题,但我是模拟测试的新手,无法弄清楚如何完成这项工作。

我有这样的代码

def check_item(item):
    <do some processing>
    return processed_item

基本上我试图用多个项目和各自的返回值来模拟这个函数。例如,如果 item 是 apple,则返回值是 processed_apple,如果它是橙色,则返回值是 processes_orange 等。

到目前为止,我正在尝试编写一个测试用例,并坚持以下

import my_module
from unittest.mock import patch

@patch("my_module.check_item")
def test_check_item(self, check_item):
    check_item.assert_called_once_with("apple")
    check_item.return_value = 'processed_apple'

不确定,如果我做得对(或正确的方式)。以及如何为每个参数检查具有不同返回值集的多个参数?

标签: pythonpython-3.xmocking

解决方案


测试方法是否被调用:

check_item.assert_called_once_with("apple")

您应该首先调用该函数:

@patch("my_module.check_item")
def test_check_item(self, check_item):
   check_item("apple")
   check_item.assert_called_once_with("apple")
   check_item.return_value = 'processed_apple'

但是在代码中我看不出有任何理由这样测试它,因为它只是在测试模拟模块。

如果你想测试函数返回值,你不应该模拟函数,而是保持原样,只测试不同的场景。例如:

def test_check_item(self):
   result = check_item("apple")
   self.assertEqual(result, "some predefined result")

单元测试的目的是测试方法/类的正确行为


推荐阅读