首页 > 解决方案 > 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_1my_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

标签: python-3.xunit-testingmockingpython-unittest

解决方案


推荐阅读