繁体   English   中英

JUnit TestTemplates 的 IntelliJ 运行上下文

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM