Python:如何模拟依赖函数调用的结果并指定它返回什么

2024-05-07 16:21:17 发布

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

我试图模拟嵌套函数调用的返回值。这应该很简单,但没用。 所以我有一个Car类,它有一个poweredBy()成员函数,返回Engine类的一个实例。 Engine类的成员getEngineType()返回字符串“BigandFast”

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'

对我在调试器中看到的模拟对象没有任何影响。 所以我的问题是:

  1. 如何在mock中指定engineType()的返回值

  2. 如果这辆车没有被传进去,语法会有什么不同 getEngineType()作为参数,但在函数内部生成


Tags: 函数returnvaluedef成员carmockengine
1条回答
网友
1楼 · 发布于 2024-05-07 16:21:17

由于您从一个Carmock开始,并从那里设置return_value链,因此您需要实际实例化一个Car:

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,最后是返回值

不幸的是,我可能没有在这里使用正确的词汇表,但是要点是:mockedCarCar类的模拟,您需要实例化它来访问您设置的return_value

相关问题 更多 >