我的模拟测试功能的方法如下:
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
。