python-3.x - Python unittest:TestCase 类中的模拟函数
问题描述
我的模拟测试函数方法如下所示:
from unittest import mock, TestCase
from main import my_function
def my_mock(s):
if s == 'hello':
return 'goodbye'
return my_function(s)
class TestMyFunction(TestCase):
@mock.patch('my_function', side_effect=MyMock.my_mock)
def test_my_function(self, mock_get):
s = 'hello'
self.assertEqual('goodbye', my_function(s))
这行得通。但是如果我有多个测试,my_mock_1
补丁test_my_function_1
和my_mock_2
补丁test_my_function_2
等等,模拟定义与测试定义相距甚远,代码变得难以阅读。
有没有办法让模拟定义更接近它们所属的测试?
我尝试的是
class TestMyFunction(TestCase):
@staticmethod
def my_mock_1(s):
...
@mock.patch('my_function', side_effect=my_mock_1)
def test_my_function_1(self, mock_get):
...
@staticmethod
def my_mock_2(s):
...
@mock.patch('my_function', side_effect=my_mock_2)
def test_my_function_2(self, mock_get):
...
...
但这失败了例外
TypeError: 'staticmethod' object is not an iterator
。
解决方案
推荐阅读
- java - 由于性能原因聚合多个 Hibernate 公式
- c++ - 如何在 librdkafka 中正确重新发送失败的消息?
- r - 从数据框中删除特定的观察结果。这些特定的观察结果存储在 R 中的另一个数据框中
- groovy - 如何使用katalon studio处理Microsoft Edge 44.18362.449.0 [Windows 10]中弹出的Windows安全?
- nginx - Nginx 反向代理 glassfish 无法正确提供资源
- javascript - 在 JavaScript 中存储的全局范围内创建的常量在哪里?
- c - 有没有办法在 Microsoft Visual Studio 中启用对 C99 可变长度数组的支持。如果否,最好的选择是什么?
- ios - 如何在Objective-C的NSDictionary中添加动态排序数据
- javascript - jquery .prop(checked,true) 值未反映在调用的方法中
- sql-server - 用零替换列中的字符串