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