CCCPaste

vehicle_testing_directly_after_basic_class!!!

from typing import ClassVar
 
 
class Vehicle:
    DEFAULT_FUEL_CONSUMPTION: ClassVar[float] = 1.25
    fuel_consumption: float
    fuel: float
    capacity: float
    horse_power: float
 
    def __init__(self, fuel: float, horse_power: float):
        self.fuel = fuel
        self.capacity = self.fuel
        self.horse_power = horse_power
        self.fuel_consumption = self.DEFAULT_FUEL_CONSUMPTION
 
    def drive(self, kilometers):
        fuel_needed = self.fuel_consumption * kilometers
        if self.fuel < fuel_needed:
            raise Exception("Not enough fuel")
        self.fuel -= fuel_needed
 
    def refuel(self, fuel):
        if self.fuel + fuel > self.capacity:
            raise Exception("Too much fuel")
        self.fuel += fuel
 
    def __str__(self):
        return f"The vehicle has {self.horse_power} " \
               f"horse power with {self.fuel} fuel left and {self.fuel_consumption} fuel consumption"
               
import unittest

class TestVehicle(unittest.TestCase):
    DEFAULT_FUEL_CONSUMPTION = 1.25
    def setUp(self):
        self.vehicle = Vehicle(100, 150)
        
    def test_initialization_is_correct(self):
        self.assertEqual(100, self.vehicle.fuel)
        self.assertEqual(100, self.vehicle.capacity)
        self.assertEqual(150, self.vehicle.horse_power)
        self.assertEqual(1.25, self.vehicle.fuel_consumption)
        
    def test_raise_exception_if_not_enough_fuel(self):
        with self.assertRaises(Exception):
            self.vehicle.drive(100)
        self.assertEqual(100, self.vehicle.fuel)
        
    def test_drive_reduces_fuel_when_distance_is_reachable(self):
        distance = 50
        fuel_needed = self.DEFAULT_FUEL_CONSUMPTION * distance # необходимото гориво за да се изминат 50 км
        self.vehicle.drive(distance) # извикваме метода drive и подаваме километрите
        expected_result = 100 - fuel_needed # горивото, което сме имали в началото - нужното гориво за изминаване на 50 км
        self.assertEqual(expected_result, self.vehicle.fuel)
    
    # прави test и ако е равно на нула
        
    def test_if_fuel_is_over_capacity_raise_exeption(self):
        with self.assertRaises(Exception):
            self.vehicle.refuel(10)
            
    def test_added_fuel_is_less_capacity(self):
        self.vehicle.fuel -= 20
        self.vehicle.refuel(20)
        self.assertEqual(100, self.vehicle.fuel)
        
    def test_vehicle_str_returns_proper_sting_message(self):
        actual_result = str(self.vehicle)
        expected = f"The vehicle has 150 " \
                    f"horse power with 100 fuel left and 1.25 fuel consumption"
        
        
if __name__ == '__main__':
    unittest.main()