#include #include #include using namespace Upp; const String CAR_REGISTRATION_NUMBER = "UPP IS THE BEST"; class Car { public: virtual ~Car() = default; virtual void OpenHood() = 0; virtual String ReadRegistrationNumbers() const = 0; }; class MockCar final : public Car { public: MOCK_METHOD(void, OpenHood, (), (override)); MOCK_METHOD(String, ReadRegistrationNumbers, (), (const, override)); }; class CarRepairShop final { public: CarRepairShop() : carsWaitingForService({ CAR_REGISTRATION_NUMBER }) {} bool Service(Car& car) { if (carsWaitingForService.Find(car.ReadRegistrationNumbers()) < 0) { return false; } car.OpenHood(); return true; } private: Index carsWaitingForService; }; TEST(CarRepairShopTest, ServiceChecksAllMainCarElements) { MockCar car; CarRepairShop repairShop; EXPECT_CALL(car, ReadRegistrationNumbers()).WillOnce(::testing::Return(String(CAR_REGISTRATION_NUMBER))); EXPECT_CALL(car, OpenHood()).Times(::testing::AtLeast(1)); EXPECT_TRUE(repairShop.Service(car)); } TEST_APP_MAIN {}