Я знал, как я могу проверить, был ли вызванный объект вызван с указанным аргументом c. Но в моем случае внедренный объект создаст объект, этот объект создаст другой объект, и я хочу проверить, был ли последний объект вызван с правильным аргументом.
в приведенном ниже примере вопрос был бы, если c .dirve был вызван с аргументом 100:
class car:
def drive(self, distance):
print("so fast")
class car_shop:
def buy_car(self):
return car()
class shop_shop:
def buy_shop(self):
return car_shop()
class processor:
def __init__(self, sshop):
self.sshop = sshop
def run(self):
cshop = self.sshop.buy_shop()
c = cshop.buy_car()
c.drive(100)
def main():
sshop = shop_shop()
proc = processor(sshop)
proc.run()
if __name__ == "__main__":
main()
есть ли способ проверить это?
Так как здесь был запрошен мой подход для тестирования этих объектов:
import pytest
from unittest.mock import Mock
from object_returns_object_test_for_arguments import processor, shop_shop
@pytest.fixture
def mock_shop_shop():
return Mock(spec=shop_shop)
def test_processor_car_called_with_100(mock_shop_shop):
proc = processor(mock_shop_shop)
proc.run()
assert mock_shop_shop.car_shop.car.drive.assert_called_once_with(100)
assert mock_shop_shop.car_shop.car.drive.call_count == 1