python - 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'
不确定,如果我做得对(或正确的方式)。以及如何为每个参数检查具有不同返回值集的多个参数?
解决方案
测试方法是否被调用:
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")
单元测试的目的是测试方法/类的正确行为
推荐阅读
- doctrine-orm - Sylius - 如何删除与删除通道相关的子自定义实体?
- c# - chrome驱动程序SessionNotCreatedException:未创建会话
- c# - Power BI - 直接查询报表导入 - C# Rest API
- mysql - MYSQL 选择子查询重写为 JOIN 以提高性能
- java - 最大互质除数
- python - Jupyter 笔记本中的 ModuleNotFoundError 拥抱面数据集
- javascript - 角度页面重定向
- debugging - 此场景 GCNN 模型不存在警告梯度
- reactjs - React-Electron-builder :不允许加载本地资源
- celery - Celery 是像 PBS、MESOS 或 YARN 这样的“真正”调度程序吗?