我知道标题很混乱,但为了清楚起见,我创建了一个我必须转置的示例:
假设我在class_file.py
中有这个代码
class CarDealership:
def allow_car_out_of_the_dealership(self, car):
logger.info(f"Driving out of the dealership")
drivers_license = car.driver.wallet.get_drivers_license()
if drivers_license:
try:
allow_car_removal(car, drivers_license)
except:
deny_car_removal(car, drivers_license)
我试图测试调用方法deny_car_removal
的情况get_valid_license()
是一种特定于driver.wallet
的方法,在class_file.py
中不会以任何方式、形状或形式导入或引用
问题是,如果get_valid_license
在实际情况下没有返回任何有效的内容,那么代码将以完全不同的方式运行。我正在尝试修补drivers_license
,以便最终将它带到我需要的地方
我猜test_class_file.py
应该是这样的:
class CarDealershipTests(BaseTestCase):
@patch('class_file.CarDealership.deny_car_removal')
def test_deny_car_removal(self):
# something here
self.assertTrue(mock_deny_car_removal.called)
从其他StackOverflow答案来看,我尝试了一些方法,但没有奏效:
car
内模拟完整的driver
实例,如下所示: def setUp(self) -> None:
self._create_car
def _create_car(self):
car = Car()
car.driver = MagicMock()
@patch.object(class_file.CarDealership.allow_car_out_of_the_dealership, "car.driver.wallet.get_valid_license")
@patch.object(class_file.CarDealership.allow_car_out_of_the_dealership, "drivers_license")
@patch("class_file.CarDealership.allow_car_out_of_the_dealership.car.driver.wallet.get_valid_license")
@patch("class_file.CarDealership.allow_car_out_of_the_dealership.drivers_license")
假设您有一个包含以下内容的文件,如图所示:
为了调用} 属性轻松完成
deny_car_removal
,我们需要allow_car_removal
抛出一个Exception
。这可以通过使用Mock
对象的^{我没有在这个测试中加入任何设置/拆卸,而是演示了
side_effect
是如何工作的,以及它最终如何调用deny_car_removal
运行时,它输出以下内容:
在您的示例中,您可能不想修补
deny_car_removal
,因为您正在尝试测试逻辑,但由于我不知道这可能是什么,所以我在我的一端修补了它。这一点是为了说明,实际上函数确实会被调用相关问题 更多 >
编程相关推荐