[英]IntelliJ run context for JUnit TestTemplates
在 JUnit 5 中,您可以定义自己的测试模板并将其绑定到注释。 现在我可以使用我自己的测试注释 @MyTest(...) 而不是 @Test 或 @ParameterizedTest
问题是 Intellij 不将此注释识别为 JUnit 测试注释,因此没有给我运行/调试此测试的选项。
我可以扩展这个告诉 IntelliJ 这是一个测试的注释列表吗?
左图是标准测试,上下文显示运行 function。 右边的图片显示了我的模板,它完美地工作,只是上下文没有将它识别为测试。
我的测试模板如下所示:
@Target(
AnnotationTarget.ANNOTATION_CLASS,
AnnotationTarget.FUNCTION
)
@Retention(AnnotationRetention.RUNTIME)
@Execution(ExecutionMode.CONCURRENT)
@TestTemplate
@ExtendWith(ScTestExtension::class)
annotation class ScTest(
// ... some properties
)
class ScTestExtension : TestTemplateInvocationContextProvider {
override fun supportsTestTemplate(context: ExtensionContext): Boolean {
return true
}
override fun provideTestTemplateInvocationContexts(extensionContext: ExtensionContext): Stream<TestTemplateInvocationContext> {
// ... return invocation context
}
}
您的ScTest.java
应该与此类似:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Test;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Test
public @interface ScTest {}
源自https://junit.org/junit5/docs/current/user-guide/#writing-tests-meta-annotations
IIRC、IDEA 和其他 IDE 会寻找Testable的实例来显示“运行...”图标。 但通常,您不应该直接使用该注释。 使用@Test
、 @TestTemplate
或朋友对其进行元注释就足够了。
这是另一个使用@TestTemplate
的示例(至少在两年前): CartesianProductTest.java
@TestTemplate
@ExtendWith(CartesianProductProvider.class)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CartesianProductTest {...}
以下是“IntelliJ IDEA 2019.3 EAP (Community Edition) Build #IC-193.4386.10, built on October 9, 2019”如何展示今天@CartesianProductTest
注解的用法:
也许您需要切换到暗模式...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.