我有一个函数我正在编写单元测试。我试图断言在给定输入参数的情况下使用适当的参数调用了许多函数。例如,单元测试功能位于名为validate.py
的文件中def function_to_test(arg1):
print 'return2: ', _sub_function_1()
arg1 = _sub_function_1(arg1)
arg1 = _sub_function_2(arg1)
arg1 = _sub_function_3(arg1)
return arg1
def _sub_function_1(arg1):
pass
def _sub_function_2(arg1):
pass
def _sub_function_3(arg1):
pass
我在一个名为dotest.py,
的文件中进行了单元测试import validate
import unittest
import mock
class TestFunctionToTest(unittest.TestCase):
@mock.patch('validate._sub_function_1')
def test_basic(self, m_sub_function_1):
m_sub_function_1 = mock.Mock(return_value='rv_sf1')
dum_arg1 = 'dum'
out = validate.function_to_test(dum_arg1)
print 'called?: ', m_sub_function_1.called
if __name__ == '__main__':
unittest.main()
运行此测试的结果是,
run -i dotest.py
return2: <MagicMock name='_sub_function_1()' id='4502266128'>
called?: False
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
由于某种原因,在_sub_function_1
的调用中无法识别为mock函数定义的返回值。我想检查function_to_test
中是否实际调用了此函数。来自模拟专家的任何见解?
答案 0 :(得分:1)
首先,self
中似乎缺少test_basic
参数。此外,您的代码不会调用function_to_test
。我个人将mock.patch
的参数写成一个字符串,因此它将成为:
class TestFunctionToTest(unittest.TestCase):
@mock.patch('validate._sub_function_1')
def test_basic(self, m_sub_function_1):
m_sub_function_1.return_value = 'rv_sf1'
function_to_test(...)
这应打印:return2: rv_sf1
。然后,您可以断言它已使用正确的参数调用:
m_sub_function1.assert_called_with(...)