在使用jUnit5的Spring Boot应用程序中执行许多测试之前,我需要做一个验证.基本上,我需要判断我的测试是否有超类(因为我们在那里预加载了上下文).我不想编辑每个其他测试,做一些允许我在运行每个测试之前进行判断的事情.我做了这样的事情:

public class InheritClassTestCheckExtension implements TestTemplateInvocationContextProvider, BeforeEachCallback {

@Override
public void beforeEach(ExtensionContext context) throws Exception {
    Class<?> superClass = context.getRequiredTestClass().getSuperclass();
    String listClasses = "";
    if (superClass doesnt exists or is object, throw a exception) {
        throw new Exception("Need to inherit from class A,B or C");
   } else { 
       Continue to the test's
   }
}

我在我的junit-platform.properties中有这个代码

junit.jupiter.extensions.autodetection.enabled=true
junit.jupiter.extensions.autodetection.names=com.my.package.InheritClassTestCheckExtension

但这并不起作用(它甚至在每次之前都没有进入方法).我挡对了路吗?或者我可以用什么来做这件事?

推荐答案

junit.jupiter.extensions.autodetection.enabled标志适用于通过ServiceLoader机制注册的扩展 https://junit.org/junit5/docs/current/user-guide/#extensions-registration-automatic-enabling

因此,预计会有InheritClassTestCheckExtension个全名 在META-INF/services/org.junit.jupiter.api.extension.Extension文件中


或者,可以使用带有@ExtendWith@RegisterExtension批注的显式声明,

Java相关问答推荐

Collections.binarySearch()使用Collections.reverseOrder()作为比较器返回-1

RDX触发ChoiceBox转换器(并按字符串值排序)

将具有多个未知字段的SON映射到Java POJO

当一个链表中间有一个循环时,它的松散部分会发生什么?

Java中不同包中的类之间的配置共享

使用包私有构造函数强制子类Java类

Springdoc Whitelabel Error Page with Spring V3

在Java中测试DAO方法:假实现与内存数据库

如何以干净的方式访问深度嵌套的对象S属性?

JVM会优化这个数学运算吗?

Hibernate EmptyInterceptor可以工作,但不能拦截器

如何使用Jackson将XML元素与值和属性一起封装

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

尽管通过中断请求线程死亡,但线程仍将继续存在

%This内置函数示例

将JSON字符串转换为Java类

当构造函数创建一个新实例时,Java为什么需要&new";

如何使用jooq更新记录?

JavaFX:为什么我的ComboBox添加了一个不必要的单元格的一部分?

Hibernate 命名策略导致 Java Spring Boot 应用程序中出现未知列错误