Объекты и методы Java - PullRequest
       3

Объекты и методы Java

1 голос
/ 22 сентября 2019

Я пытаюсь понять, как объекты работают на Java с программой транспортных средств с автоматической коробкой передач.У меня есть один метод для увеличения скорости автомобиля speedIncrease, а другой - для получения скорости текущего объекта currentSpeed.В моем тестовом примере я создал объект TransmissionBox с именем renault с начальной скоростью 25.Метод speedUp увеличивает скорость на два, поэтому новая скорость должна быть равна 27. Кажется, что объект теряет все модификации после своего первого вызова.Как это возможно?

тест: настройка

  @Before
  public void setUp(){
    private TransmissionBox renault;
    renault = new TransmissionBox(25,10,20,30,40,50);
  }

тест: скорость = 27

  @Test
  public void speedIncrease(){
   assertEquals(27,renault.speedUp().currentSpeed());
  }

тест: скорость = 25

  @Test
  public void speedIncrease(){
   renault.speedUp();
   assertEquals(25,renault.currentSpeed());
  }


**TransmissionBox class**

public class TransmissionBox {
private int speed;
private int gear;
private int threesholdOne;
private int threesholdTwo;
private int threesholdThree;
private int threesholdFour;
private int threesholdFive;



  public TransmissionBox(int iniSpeed, int iniThresholdOne, int iniThresholdTwo, int iniThresholdThree, int iniThresholdFour, int iniThresholdFive){
      this.speed = iniSpeed;
      this.threesholdOne = iniThresholdOne;
      this.threesholdTwo = iniThresholdTwo;
      this.threesholdThree = iniThresholdThree;
      this.threesholdFour = iniThresholdFour;
      this.threesholdFive = iniThresholdFive;

      if(speed == 0 && speed < threesholdOne){
        this.gear = 1;
      }

    else if(speed > threesholdOne && speed < threesholdTwo){
      this.gear = 2;
    }

    else if(speed > threesholdTwo && speed < threesholdThree){
        this.gear = 3;
    }

    else if(speed > threesholdThree && speed < threesholdFour){
        this.gear = 4;
    }

    else{
        this.gear = 5;
    }

  }


  public TransmissionBox speedUp(){
    TransmissionBox fasterCar = new TransmissionBox(speed+2, threesholdOne, threesholdTwo, threesholdThree, threesholdFour, threesholdFive);
    return fasterCar;
  }

  public TransmissionBox speedDown(){
    TransmissionBox slowerCar = new TransmissionBox(speed-2, threesholdOne, threesholdTwo, threesholdThree, threesholdFour, threesholdFive);
    return slowerCar;
  }

  public int currentSpeed(){
    return this.speed;
  }

  public int currentGear(){
    return this.gear;
  }


  public String toString(){
    return "speed: " + this.speed + "\n gear: " + this.gear;
  }
}

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Обратите внимание, что вы делаете здесь:

renault.speedUp();
assertEquals(25,renault.currentSpeed());

Что происходит, когда вы звоните speedUp()?Это делает:

TransmissionBox fasterCar = new TransmissionBox(speed+2, threesholdOne, threesholdTwo, threesholdThree, threesholdFour, threesholdFive);
return fasterCar;

Существующий объект *1008* не изменяется, и возвращается новый объект.По сути, нынешняя машина вообще не «ускоряется».Вы только что сели в новую более быструю машину.

Но что вы делаете с этим новым возвращенным объектом?Ничего:

renault.speedUp();

Объект renault не изменяется, а новый возвращаемый объект игнорируется / отбрасывается.renault по-прежнему идёт как 25.

Если вы хотите, чтобы speedUp() влиял на текущий автомобиль, измените текущий объект вместо того, чтобы возвращать новый:

public void speedUp(){
    this.speed += 2;
}

Примечаниечто это больше не возвращает объект.Если вам это действительно не нужно, семантика этого потока на самом деле не имеет смысла.(Не все должен быть свободным интерфейсом.) Таким образом, этот тест необходимо изменить:

@Test
public void speedIncrease(){
    assertEquals(27,renault.speedUp().currentSpeed());
}

На что-то вроде этого:

@Test
public void speedIncrease(){
    renault.speedUp();
    assertEquals(27,renault.currentSpeed());
}
0 голосов
/ 22 сентября 2019

Вы вызываете speedUp () в неправильном тесте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...