Как проверить, существует ли переменная с помощью JUnit 5?

#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 .