java - 如何使用 JUnit 5 测试变量是否存在?
问题描述
我想测试一下 JUnit 测试中是否存在变量。
我有一个名为动物的类,它是一个抽象类。
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;
}
}
我想测试一下变量年龄是否存在,以及它是否是私有的和最终的。我将如何在 Junit 测试中做到这一点?
解决方案
你可以这样做:
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
。
推荐阅读
- javascript - “之前”中的异步函数出错 - 使用 mocha 和 puppeteer 进行测试
- postman - 使用 Postman 进行负面测试
- azure-devops - 如果部署后门检查失败,部署是否会回滚到上次部署的构建?
- c++ - 如何将 const 添加到 decltype(...) typedef?
- python - 数据框在满足条件时选择连续跨度
- c# - 提取 n 位并从 Int32 创建 int
- sql - 从Oracle中的表中获取日期过滤器?
- c# - RepoDB - 忽略属性
- mysql - SQL 查询:奇怪的 SUM 行为
- node.js - nodeJS和expressJS中的Bootstrap问题