Objekt in Methode zurückgeben, JUnit zeigt Error

Alpinwhite

Aktives Mitglied
Hallo, in einer Aufgabe soll ich für ein Programm in einer Methode ein Objekt "Vehicle" mit passendem Typus und Tankgröße (für Benzin 40l und für Diesel 80l) zurückgeben. Der JUnit test gibt aber eine Fehlermeldung aus, die ich nicht nachvollziehen kann.

Hier der Fehler:

Code:
 private void testSoldCarAttributes(byte vehicleType, final Vehicle v) {
        switch (vehicleType) {
            case VehicleType.PASSENGER_CAR:
                assertEquals(40.f, v.getFuel(), DELTA_FLOAT);

Das Programm funktioniert ansonsten wie es soll und ich habe auch getestet ob das Objekt übergeben wird, nur diese eine Sache macht mich verrückt.

In der Aufgabe heißt es:

Werden aber ein Fahrzeug (PKW oder LKW) (bzw. mehrere) eines bestimmten Herstellers verkauft, dann soll als Methoden-Rückgabewert ein Objekt der Klasse Vehicle mit dem richtigen Treibstofffüllstand (Feld fuel) und Typus (Feld vehicleType) zurückgegeben werden. Bei mehreren gleichzeitig verkauften Fahrzeugen eines beliebigen PKWoder LKW-Herstellers legen sie mehrere Instanzen an und geben sie einen passenden befüllten Array zurück

CarTrader inklusive Methode für Einzelfahrzeugverkauf:

Java:
public abstract class CarTrader {

    public static final float CAPACITY_DIESEL_LITERS = 350.f;
    public static final float CAPACITY_GAS_LITERS = 180.f;
    public static final int CAPACITY_PASSENGER_CARS = 15;
    public static final int CAPACITY_TRUCKS = 8;
   
   
 
   
    int passengerCarsStock=15;
    int trucksStock=8;
   
   
   
    public CarTrader(){
       
    }

    void setGasStockLiters(float gasStockLiters){
        PassengerCarTrader.gasStockLiters=gasStockLiters;
    }
   
    void setDieselStockLiters(float dieselStockLiters){
        TruckTrader.dieselStockLiters=dieselStockLiters;
    }
   
    void setPassengerCarsStock(int passengerCarsStock){
        this.passengerCarsStock=passengerCarsStock;
    }
   
    void setTrucksStock(int trucksStock){
        this.trucksStock=trucksStock;
    }
   
    int getPassengerCarsStock(){
        return passengerCarsStock;
    }
   
    int getTrucksStock(){
        return trucksStock;
    }
    float getGasStockLiters(){
        return PassengerCarTrader.gasStockLiters;
    }
    float getDieselStockLiters(){
        return TruckTrader.dieselStockLiters;
    }
   
   

    public Vehicle sellVehicle(byte vehicleType, int brand){
           
    Vehicle soldCar=null;
       
       
    switch (vehicleType){
   
   
    case 0:
       
        if (PassengerCarTrader.gasStockLiters>=Vehicle.TANK_SIZE_PASSENGER_CAR){
       
       
            switch (brand) {
            case VehicleBrand.AUDI:
       
                if (PassengerCarTrader.audiStock>=1){
                    PassengerCarTrader.audiStock = PassengerCarTrader.audiStock - 1;
                    PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR;
                    passengerCarsStock = passengerCarsStock - 1;
                    soldCar = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                }else {
                    soldCar=null;
                    System.err.println("Nicht genug Audi oder Benzin vorhanden");
                   
                }
                break;
            case VehicleBrand.BMW:
                if( PassengerCarTrader.bMWStock>=1){
                     PassengerCarTrader.bMWStock = PassengerCarTrader.bMWStock -1;
                     PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR ;
                    passengerCarsStock =passengerCarsStock - 1;
                    soldCar = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                } else {
                    soldCar=null;
                    System.err.println("Nicht genug BMW oder Benzin vorhanden");
                   
                }
                break;
            case VehicleBrand.MERCEDES:
                if ( PassengerCarTrader.mercedesStock>=1){
                     PassengerCarTrader.mercedesStock = PassengerCarTrader.mercedesStock - 1;
                     PassengerCarTrader.gasStockLiters =PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR;
                    passengerCarsStock = passengerCarsStock - 1;
                    soldCar = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                } else {
                    soldCar=null;
                    System.err.println("Nicht genug Mercedes oder Benzin vorhanden");
                   
                }
                break;
            case VehicleBrand.OPEL:
                if( PassengerCarTrader.opelStock>=1){
                     PassengerCarTrader.opelStock =  PassengerCarTrader.opelStock -1;
                     PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR;
                    passengerCarsStock = passengerCarsStock - 1;
                    soldCar = new Vehicle(VehicleType.PASSENGER_CAR, Vehicle.TANK_SIZE_PASSENGER_CAR);
       
                } else {
                    soldCar=null;
                    System.err.println("Nicht genug Opel oder Benzin vorhanden");
                   
                }
                break;
            default: soldCar=null;
       
            break;
            }
           
        } else {
            soldCar=null;
        }
       
            System.out.println("Fahrzeug(e) erfolgreich verkauft");
    break;
       
    case 1:
       
        if (TruckTrader.dieselStockLiters>=Vehicle.TANK_SIZE_TRUCK){
       
            switch (brand) {
            case VehicleBrand.MAN://MAN
                if (TruckTrader.mANStock>=1){
                    TruckTrader.mANStock = (TruckTrader.mANStock-1);
                    trucksStock = trucksStock - 1;
                    TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - Vehicle.TANK_SIZE_TRUCK;
                    soldCar = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
                    System.out.println("Fahrzeug(e) erfolgreich verkauft");
                } else {
                    soldCar=null;
                    System.err.println("Nicht genug MAN-Trucks oder Diesel vorhanden");
                   
                }
                break;
            case VehicleBrand.SCANIA:
                if(TruckTrader.scaniaStock>=1){
                    TruckTrader.scaniaStock = TruckTrader.scaniaStock -1;
                    trucksStock = trucksStock - 1;
                    TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - Vehicle.TANK_SIZE_TRUCK;
                    System.out.println("Fahrzeug(e) erfolgreich verkauft");
                    soldCar = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
                } else {
                    soldCar=null;
                    System.err.println("Nicht genug Scania-Trucks oder Diesel vorhanden");
                   
                }
                break;
            default: soldCar=null;
           
           
             break;
            }
       
        } else{
            soldCar=null;
        }
       
    }
        return soldCar;
       
       
    }

Methode aus CarTrader-Klasse zum Verkauf für mehrere Fahrzeuges eines beliebigen Typs.

Code:
public Vehicle[] sellVehicles(byte vehicleType, int brand, int amount){
       
    Vehicle[] soldVehicle= new Vehicle[amount];
        boolean soldCar=false;
        boolean soldTruck=false;
       
        if(vehicleType==0){
           
            if(TruckTrader.dieselStockLiters>=Vehicle.TANK_SIZE_TRUCK*amount){
               
                switch (brand) {
                case VehicleBrand.MAN://MAN
                    if (TruckTrader.mANStock>=amount){
                        TruckTrader.mANStock = TruckTrader.mANStock - amount;
                        trucksStock = trucksStock - amount;
                        TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - (Vehicle.TANK_SIZE_TRUCK*amount);
                        soldTruck=true;
                        for(int i=0; i<amount;i++){
                        soldVehicle[i] = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
                        }
                        System.out.println("Verkauf erfolgreich");
                    } else {
                        for(int i=0; i<amount;i++){
                        soldVehicle[i] =null;
                        }
                    }
                    break;
                case VehicleBrand.SCANIA://Scania
                    if(TruckTrader.scaniaStock>=amount){
                        TruckTrader.scaniaStock = TruckTrader.scaniaStock -amount;
                        trucksStock = trucksStock - amount;
                        TruckTrader.dieselStockLiters = TruckTrader.dieselStockLiters - Vehicle.TANK_SIZE_TRUCK*amount;
                        soldTruck=true;
                        for(int i=0; i<amount;i++){
                            soldVehicle[i] = new Vehicle(VehicleType.TRUCK,Vehicle.TANK_SIZE_TRUCK);
                            }
                            System.out.println("Verkauf erfolgreich");
                        } else {
                            for(int i=0; i<amount;i++){
                            soldVehicle[i] =null;
                            }
                        }
                    break;
                }
                   
            }else {
                for(int i=0; i<amount;i++){
                soldVehicle[i] =null;
                }
            }
        }   
       
       
               
           
        if(vehicleType==1){
           
            if (PassengerCarTrader.gasStockLiters>=Vehicle.TANK_SIZE_PASSENGER_CAR*amount){
           
           
                switch (brand){
                case VehicleBrand.AUDI://AUDI
                    if ( PassengerCarTrader.audiStock>=amount){
                         PassengerCarTrader.audiStock =  PassengerCarTrader.audiStock - amount;
                         PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - (Vehicle.TANK_SIZE_PASSENGER_CAR*amount);
                        passengerCarsStock = passengerCarsStock - amount;
                        soldCar=true;
                        for(int i=0; i<amount;i++){
                            soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                            }
                         System.out.println(soldVehicle[0].getVehicleType());
                         System.out.println(soldVehicle[0].getFuel());
                         System.out.println(soldVehicle[1].getVehicleType());
                         System.out.println(soldVehicle[1].getFuel());
                            System.out.println("Verkauf erfolgreich");
                        } else {
                            for(int i=0; i<amount;i++){
                            soldVehicle[i] =null;
                            }
                    }
                    break;
                case VehicleBrand.BMW://BMW
                    if( PassengerCarTrader.bMWStock>=amount){
                         PassengerCarTrader.bMWStock =  PassengerCarTrader.bMWStock -amount;
                         PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - (Vehicle.TANK_SIZE_PASSENGER_CAR*amount);
                        passengerCarsStock = passengerCarsStock - amount;
                        soldCar=true;
                     for(int i=0; i<amount;i++){
                        soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                        }
                        System.out.println("Verkauf erfolgreich");
                    } else {
                        for(int i=0; i<amount;i++){
                        soldVehicle[i] =null;
                        }
                    }
                    break;
                case VehicleBrand.MERCEDES://MERCEDES
                    if ( PassengerCarTrader.mercedesStock>=amount){
                         PassengerCarTrader.mercedesStock =  PassengerCarTrader.mercedesStock - amount;
                         PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - Vehicle.TANK_SIZE_PASSENGER_CAR*amount;
                        passengerCarsStock =passengerCarsStock - amount;
                        soldCar=true;
                     for(int i=0; i<amount;i++){
                        soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                        }
                        System.out.println("Verkauf erfolgreich");
                    } else {
                        for(int i=0; i<amount;i++){
                        soldVehicle[i] =null;
                        }
                    }
                    break;
                case VehicleBrand.OPEL://OPEL
                    if( PassengerCarTrader.opelStock>=amount){
                         PassengerCarTrader.opelStock =  PassengerCarTrader.opelStock -amount;
                         PassengerCarTrader.gasStockLiters = PassengerCarTrader.gasStockLiters - (Vehicle.TANK_SIZE_PASSENGER_CAR *amount);
                        passengerCarsStock = passengerCarsStock - amount;
                        soldCar=true;
                        for(int i=0; i<amount;i++){
                            soldVehicle[i] = new Vehicle(VehicleType.PASSENGER_CAR,Vehicle.TANK_SIZE_PASSENGER_CAR);
                            }
                            System.out.println("Verkauf erfolgreich");
                        } else {
                            for(int i=0; i<amount;i++){
                            soldVehicle[i] =null;
                            }
                        }
                    break;
                }       
              }
           
            else {
                for(int i=0; i<amount;i++){
                soldVehicle[i] =null;
                }
            }
       
            }
       
        return soldVehicle;
        }

Vehicle-Klasse

Java:
public class Vehicle {
    public static final float TANK_SIZE_PASSENGER_CAR = 40.f;
    public static final float TANK_SIZE_TRUCK = 80.f;
    public float fuel;
    public byte mVehicleType;
    public int brand;

    public Vehicle(){}

    public Vehicle(byte vehicleType, float fuel){
        this();
        if (vehicleType == VehicleType.PASSENGER_CAR){
            this.mVehicleType= VehicleType.PASSENGER_CAR ;
        }
        if (fuel==TANK_SIZE_PASSENGER_CAR){
            this.fuel=fuel;
        }

        if(vehicleType == VehicleType.TRUCK){
            this.mVehicleType= VehicleType.TRUCK;
        }
        if(fuel==TANK_SIZE_TRUCK){
            this.fuel=fuel;
        }
    }
   

    public float getFuel(){
        return this.fuel;
    }

    public byte getVehicleType(){
        return this.mVehicleType;
    }
}
 
Java:
 @Test
    public void testSoldCarAttributes() {
        testSoldCarAttributes(VehicleType.PASSENGER_CAR, trader.sellVehicle(VehicleType.PASSENGER_CAR));
        testSoldCarAttributes(VehicleType.TRUCK, trader.sellVehicle(VehicleType.TRUCK));
    }

Das ist nach dem anderen Post der Ausschnitt, der das aufruft, was du als Fehler angibt.

Ich kann da keine Typ-Unterscheidung(MAN,BMW etc) erkennen.

Irgendwie passen Code und Test nicht zusammen.
 

Zurück
Oben