#java #junit #getter
#java #junit #getter
Вопрос:
public class car {
private String make;
private String model;
private int mileage;
private int year;
private float price;
public car(String make, String model, int mileage, int year, float price) {
this.make = make;
this.model = model;
this.mileage = mileage;
this.year = year;
this.price = price;
}
private String getMake() {
return make;
}
private String getModel() {
return model;
}
private int getMileage() {
return mileage;
}
private int getYear() {
return year;
}
private float getPrice() {
return price;
}
public String toString() {
return "Make:" getMake() "nModel:" getModel() "nMileage:" getMileage() "nYear:" getYear() "nPrice:" getPrice();
}
class carTest {
private String[] carToStringArray(car c) {
String[] carInfo = {c.getMake(), c.getModel(), Integer.toString(c.getMileage()),
Integer.toString(c.getYear()), Integer.toString(c.getPrice())};
return carInfo;
}
@Test
void verifyCarEqualityWithMakeModelYear() {
String[] expected = {"Toyota", "RAV4", "2018"};
car actual = new car("Honda", "Altima",45000, 2015, 12000);
assertArrayEquals(expected, carToStringArray(actual));
}
}
У меня ошибка в carToStringArray(). В c.getMake(), c.getModel(), c.getMileage(), c.getYear(), c.getPrice() есть красное подчеркивание. Я получил сообщение об ошибке, что «Метод getMake () из типа car не виден», но у меня есть этот метод в классе car. Могу ли я узнать, что не так с моим тестовым кодом?
Ответ №1:
Если вы обращаетесь к своим методам получения извне класса, вам необходимо изменить видимость. Например. на public
:
public String getMake() {
return make;
}
Вы можете прочитать больше об этом в официальном документе java.
Ответ №2:
Все геттеры есть private
, поэтому их нельзя использовать извне класса. Вы должны определить их как public
или, по крайней мере, иметь видимость по умолчанию, предполагая, что car
и carTest
находятся в одном пакете.
Ответ №3:
getMake
, getModel
, getMileage
и другие подобные методы — все они называются геттерами. И в вашем коде модификатор доступа, который вы используете для них, является private
. Это означает, что эти методы получения не будут доступны за пределами этого класса.
Если вы хотите вызвать эти методы из-за пределов этого класса, вам придется повысить модификатор доступа.
Обычно мы создаем геттеры public
, но это всего лишь соглашение, и нет строгого правила, которое обязывает вас это делать.
Прочитайте эту статью, чтобы получить подробное представление об этой теме.