我正在尝试从嵌套函数调用中模拟返回值。这应该很简单,但它不起作用。 所以我有一个Car类,它有一个powersBy()成员函数,它返回一个Engine类的实例。 Engine类有一个成员getEngineType(),它返回字符串'BigandFast'。
@$(MAKE) $(ARGS) $(PROJECT_DIR)$(_proj) $(_rule)
所以:Car()。poweredBy()。engineType()返回'BigandFast'
我有一个函数getEngineType(),它接受一个汽车并返回引擎类型:
class Engine(object):
def engineType(self):
return 'BigandFast'
class Car(object):
def poweredBy(self):
return Engine()
我想模拟getEngineType()函数,以便我可以更改结果:
def getEngineType(aCar):
return aCar.poweredBy().engineType()
但这仍然会回归'BigandFast'。这一行:
mockedCar.return_value.poweredBy.return_value.getEngineType.return_value ='SmallAndSlow'
对我在调试器中可以看到的模拟对象没有任何影响。 所以我的问题是:
如何在模拟
如果没有传递Car,语法会如何/不同 getEngineType()作为参数但在函数内部生成。
答案 0 :(得分:0)
由于你开始使用Car 类模拟并从那里设置return_value
链,你需要实际实例化一辆汽车:
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类模拟开始,然后你获得一个Car对象模拟的返回值,然后是一个powersBy方法模拟,然后是一个engineType方法模拟,最后是返回值。
不幸的是,我可能没有在这里使用正确的词汇,但要点是:mockedCar
是Car
类的模拟,你需要实例化它以访问您设置的return_value
。