Python:如何模拟依赖函数调用的结果并指定其返回的内容
我试图模拟嵌套函数调用的返回值。这应该很简单,但不起作用。 所以我有一个Car类,它有一个poweredBy()成员函数,返回Engine类的一个实例。 Engine类有一个成员getEngineType(),该成员返回字符串“BigandFast”Python:如何模拟依赖函数调用的结果并指定其返回的内容,python,mocking,Python,Mocking,我试图模拟嵌套函数调用的返回值。这应该很简单,但不起作用。 所以我有一个Car类,它有一个poweredBy()成员函数,返回Engine类的一个实例。 Engine类有一个成员getEngineType(),该成员返回字符串“BigandFast” class Engine(object): def engineType(self): return 'BigandFast' class Car(object): def poweredBy(self):
class Engine(object):
def engineType(self):
return 'BigandFast'
class Car(object):
def poweredBy(self):
return Engine()
所以:Car().poweredBy().engineType()返回'BigandFast'
我有一个函数getEngineType(),它接受一辆汽车并返回发动机类型:
def getEngineType(aCar):
return aCar.poweredBy().engineType()
我想模拟getEngineType()函数,以便更改结果:
@mock.patch('testing.scratch.mock_test.Car')
def mockedCar(mockedCar):
mockedCar.return_value.poweredBy.return_value.getEngineType.return_value = 'SmallAndSlow'
print getEngineType(mockedCar)
但这仍然返回“BigandFast”。该行:
mockedCar.return\u value.poweredBy.return\u value.getEngineType.return\u value='SmallAndSlow'
对我在调试器中看到的模拟对象没有任何影响。
因此,我的问题是:
由于您从一个Car类mock开始,并从那里设置
return\u值
链,因此您需要实际实例化一辆车:
import mock
class Engine(object):
def engineType(self):
return 'BigandFast'
class Car(object):
def poweredBy(self):
return Engine()
def getEngineType(aCar):
return aCar.poweredBy().engineType()
@mock.patch('__main__.Car')
def mockedCar(mockedCar):
mockedCar.return_value.poweredBy.return_value.engineType.return_value = 'SmallAndSlow'
c = Car()
print getEngineType(c)
mockedCar()
输出:
SmallAndSlow
因此,首先是一个Car类mock,然后是Car对象mock的返回值,然后是poweredBy方法mock,然后是engineType方法mock,最后是返回值
不幸的是,我可能没有在这里使用正确的词汇,但要点是:
mockedCar
是对Car
类的模拟,你需要实例化它来访问你设置的返回值
。不应该mockedCar.return\u value.poweredBy.return\u value.getEngineType.return\u value
bemockedCar.return\u value.poweredBy.return\u value.engineType.return\u value
?那么getEngineType的结果是一个“空”模拟:不是“SmallAndSlow”