如何发送参数到模拟函数?

2024-10-01 02:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个功能。函数function2()调用function1()。 原始function1()从参数中获取一个值并返回一个值。我想用mock function1()测试function2()。但mockfunction1()不接受参数。问题出在哪里?你知道吗

调用没有参数的mockfunction1()不是问题。如果我想使用参数,测试将以错误结束。你知道吗

function1_mock() missing 1 required positional argument: 'parameter'.

# application.py

def function1(parameter1):
    return parameter1

def function2(parameter2):
    return function1('function1') + parameter2
# test_application.py

import unittest
import unittest.mock

import application


class TestCalling(unittest.TestCase):

    def function1_mock(self, parameter):
        return parameter

    @unittest.mock.patch('application.function1', side_effect=function1_mock)
    def test_function2(self, mock_function):
        self.assertEqual(application.function2('function2'),
                         'function1function2')


if __name__ == '__main__':
    unittest.main()

在这种情况下,测试是错误的

^{2}$

我想写语法正确的代码,其中模拟函数接受参数。你知道吗


Tags: 函数pyimportself参数returnparameterapplication
2条回答

我解决了这个问题。我将类TestCalling()中的方法function1_mock(self, parameter)转换为函数function1_mock(parameter)。这是正确的。 完整代码:

# application.py

def function1(parameter1):
    print('o f1')
    return parameter1


def function2(parameter2):
    print('o f2')
    return function1('function11') + parameter2
# test_application.py

import unittest
import unittest.mock

import application


class TestCalling(unittest.TestCase):

    def function1_mock(parameter):
        print('function1_mock')
        return parameter

    @unittest.mock.patch('application.function1', side_effect=function1_mock)
    def test_function2(self, mock_function):
        self.assertEqual(application.function2('function2'), 'function1function2')


if __name__ == '__main__':
    unittest.main()

致DroidX86:谢谢你的提示。你知道吗

def function1_mock(self, parameter):

此函数接受2个参数。对象self&;parameter。你知道吗

def function1(parameter1):

这只需要一个。因此,当代码调用它时,它只传递一个参数。你知道吗

试试这个:

 @unittest.mock.patch('application.function1', side_effect=self.function1_mock)

这将把self参数添加到模拟调用中

记住:obj.func()__Classname__func(obj)的语法糖

相关问题 更多 >