问题描述
QuarkusTestResource 如何与 Tag Annotation 结合使用?
示例测试程序
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
@Tag("integration")
@QuarkusTestResource(DatabaseResource.class)
public class MyTest {
@Test
public void () {
doTests...
}
}
Maven 代码段:
<quarkus-plugin.version>1.12.1.Final</quarkus-plugin.version>
<quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
<quarkus.platform.version>1.12.1.Final</quarkus.platform.version>
<surefire-plugin.version>2.22.1</surefire-plugin.version>
<testscope>unit</testscope>
...
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<groups>${testscope}</groups>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
...
Maven 命令:
./mvnw clean test
结果:QuarkusTestResource即使没有注释“unit”也会启动,所以Quarkus似乎不知道标签注释?
解决方法
Quarkus 测试资源是全局的,这意味着它无论如何都会运行,即使您的类使用不应运行的标签进行注释。
为防止这种情况,请尝试使用
注释您的类@QuarkusTestResource(restrictToAnnotatedClass = true)
测试资源是全局的,即使它们是在测试类或自定义配置文件中定义的,这意味着它们将在所有测试中都被激活,即使我们确实删除了重复项。 如果您只想在单个测试类或测试配置文件上启用测试资源,您可以使用@QuarkusTestResource(restrictToAnnotatedClass = true)。
,您正在寻找的可能是 tags
的 QuarkusTestProfile
方法。请参阅文档的 this 部分