簡體   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