我有两个python文件:
function.py:
def foo ():
return 20
def func ():
temp = foo()
return temp
和mocking.py:
from testing.function import *
import unittest
import mock
class Testing(unittest.TestCase):
def test_myTest(self):
with mock.patch('function.func') as FuncMock:
FuncMock.return_value = 'string'
self.assertEqual('string', func())
我想模拟func,但没有积极的结果。我有AssertionError:' string' != 20.我该怎么做才能正确嘲笑它?如果我做mock.patch(' func')我有TypeError:需要一个有效的目标来修补。您提供了:' func'。如果我将func移动到mocking.py并调用foo:function.foo()它可以正常工作。但是,当我不想将函数从function.py移动到mocking.py时,如何做到这一点?
答案 0 :(得分:2)
当您调用实际函数时,模拟很有用,但您希望模拟该函数内部的某些函数调用。在您的情况下,您的目标是模仿func
,并希望通过func()
直接调用该模拟函数。
然而,由于您正在嘲笑function.func
但您已经将func
已导入测试文件中,因此无法正常工作。因此,您调用的func()
是实际功能,它与模拟的FuncMock
不同。尝试拨打FuncMock()
,然后按预期获得结果。
以下内容应该有效,它可以让您了解可以做些什么:
from testing.function import func
import unittest
import mock
class Testing(unittest.TestCase):
def test_myTest(self):
with mock.patch('testing.function.foo') as FooMock:
FooMock.return_value = 'string'
self.assertEqual('string', func())