Я пытался использовать метод Junit для метода, но тест не прошел, хотя «ожидаемый» был таким же, как «был ....». Мне интересно, в чем проблема? метод lowerRate - это всего лишь метод, который принимает в качестве входного сигнала «HotelRoom» и выдает цену со скидкой 10%. Благодаря Это мой код для теста:Junit test - Нет ошибок, которые я вижу?
@Test
public void testLowerRate() {
System.out.println("lowerRate");
HotelRoom room = new HotelRoom(4, 300, "N");
HotelRoom instance = new HotelRoom(0, 0, "N");
HotelRoom expResult = new HotelRoom(4, 270, "N");
HotelRoom result = instance.lowerRate(room);
assertEquals(expResult, result);
}
@Test
@SuppressWarnings("empty-statement")
public void testLowerRate2() {
System.out.println("lowerRate");
HotelRoom room = new HotelRoom(4, 100, "N");
HotelRoom instance = new HotelRoom(0, 0, "N");
HotelRoom expResult = new HotelRoom(4, 90, "N");
HotelRoom result = instance.lowerRate(room);
assertEquals(expResult, result);
}
@Test
public void testLowerRate3() {
System.out.println("lowerRate");
HotelRoom room = new HotelRoom(4, 1000, "N");
HotelRoom instance = new HotelRoom(0, 0, "N");
HotelRoom expResult = new HotelRoom(4, 900, "N");
HotelRoom result = instance.lowerRate(room);
assertEquals(expResult, result);
}
}
EDIT ------
Вот код для программы:
class HotelRoom {
private int numofBeds;
private double rateperNight;
private String YorNoceanView;
HotelRoom(int input1, double input2, String input3) {
numofBeds = input1;
rateperNight = input2;
YorNoceanView = input3;
}
public int getnumofBeds() {
return numofBeds;
}
public void setnumofBeds(int numofBeds) {
this.numofBeds = numofBeds;
}
public double getrateperNight() {
return rateperNight;
}
public void setrateperNight(double rate) {
this.rateperNight = rateperNight;
}
public String getYorNoceanView() {
return YorNoceanView;
}
public void setYorNoceanView(String YorNoceanView) {
this.YorNoceanView = YorNoceanView;
}
@Override
public String toString() {
return "Hotel Room{" + "Title= " + numofBeds + ", Rate per night= $" + rateperNight + ", Ocean View (Y or N)=" + YorNoceanView + "}";
}
String roomUnder(HotelRoom room, double price) {
if (room.getrateperNight() > price) {
return "The room costs more than the given price";
}
if (room.getrateperNight() < price) {
return "The room costs less than the given price";
}
else
return "The room costs as much as the given price.";
}
HotelRoom lowerRate(HotelRoom room) {
room.rateperNight = 0.9 * room.rateperNight;
return room;
}
}
public class Chpt2930HotelRoom {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
String input = "input";
Scanner scan = new Scanner(System.in);
Scanner user = new Scanner(System.in);
System.out.print("Enter number of Beds: ");
int nextLineBeds = scan.nextInt();
HotelRoom HotelR = new HotelRoom(num1, num2, input);
HotelR.setnumofBeds(nextLineBeds);
System.out.println();
System.out.print("Enter rate per night in Dollars: $");
double nextLineRate = scan.nextDouble();
HotelR.setrateperNight(nextLineRate);
System.out.println();
System.out.print("Enter whether the room has an ocean view (Y or N): ");
String nextLineOcean = user.nextLine();
HotelR.setYorNoceanView(nextLineOcean);
System.out.println();
System.out.println(HotelR.toString());
}
}
Покажите нам ваш 'HotelRoom' класс. Вы реализуете метод 'equals'? –
Вы не переопределяете 'equals' и' hashCode' в 'HotelRoom', поэтому он наследует реализацию по умолчанию из' Object', которая использует '=='. Поскольку ваши фактические и ожидаемые результаты не совпадают, тест не проходит. Еще одно замечание заключается в том, что методы 'lowerRate' и' roomUnder' не имеют смысла - почему вы передадите _another_' HotelRoom' в 'HotelRoom' - эти методы должны действовать на сам экземпляр - т. Е.' This'. Или быть статичным. –
Как вы думаете, 'assertEquals' работает? –