#java #unit-testing #testing #junit #junit5
#java #модульное тестирование #тестирование #junit #junit5
Вопрос:
Я хотел бы проверить, существует ли переменная в тестировании JUnit.
У меня есть класс с именем animal, который является абстрактным классом.
public abstract class Animal {
private final int age;
private final int speed;
public Animal (int age,int speed) {
this.age = age;
this.speed = speed;
}
public static void main(String[] args) {
}
@Override
public boolean equals(Object anotherObject) {
if (this == anotherObject) {
return true;
}else {
return false;
}
}
public abstract Animal[] multiply(int n);
private boolean isFaster(Animal a) {
if(this.getSpeed() >a.getSpeed()) {
return true;
}else {
return false;
}
}
private boolean isOlder(Animal a) {
if(this.getAge() >a.getAge()) {
return true;
}
return false;
}
@Override
public String toString() {
return this.getClass() "is " this.getAge() " years old, is " this.getSpeed() " units fast.";
}
public final int getAge() {
return age;
}
public final int getSpeed() {
return speed;
}
}
Я хотел бы проверить, существует ли переменная age, а также является ли она частной и окончательной. Как я мог бы потенциально сделать это в тестировании Junit?
Комментарии:
1. Что вы имеете в виду
exists
? Вы имеете в виду, имеет ли она какое-то значение?2. Я имею в виду, что это больше похоже на проверку того, что класс Animal имеет переменную с именем age, не обязательно, что присвоено значение.
3. Поскольку
age
она объявлена в классе, как она может «не существовать»?4. @ArvindKumarAvinash как? Вы не можете удалять свойства из класса, поэтому, если абстрактный базовый класс имеет свойства, они есть во всех реализующих классах, хотите вы этого или нет.
5. @Gimby — Вы правы, но вопрос OP заключается только в проверке, существует ли член в классе.
Ответ №1:
Вы можете сделать это следующим образом:
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.lang.reflect.Field;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
class TestAnimal {
@Test
void testAge() {
Field[] fields = Animal.class.getDeclaredFields();
assertEquals(true, Arrays.stream(fields).anyMatch(f -> f.getName().equals("age")));
for (Field f : fields) {
if (f.getName().equals("age")) {
assertEquals(0, f.toGenericString().indexOf("private"));
assertEquals(true, f.toGenericString().contains("final"));
break;
}
}
}
}
Проверьте страницу документации Field, чтобы узнать больше об Field#getName
и Field#toGenericString
.