IntelliJ запускает контекст для JUnit TestTemplates - PullRequest
1 голос
/ 09 октября 2019

В JUnit 5 вы можете определить свой собственный тестовый шаблон и привязать его к аннотации. Вместо @Test или @ParameterizedTest теперь я могу использовать свою собственную аннотацию теста @MyTest (...)

Проблема в том, что Intellij не распознает эту аннотацию как аннотацию теста JUnit, поэтому не дает мне возможностьзапустить / отладить этот тест.

Могу ли я расширить этот список аннотаций, который сообщает IntelliJ, что это тест?

Изображение слева - это стандартный тест, в котором контекст показывает функцию запуска. На рисунке справа показан мой шаблон, который отлично работает, просто контекст не распознает его как тест.

with context context not recognized

Мой тестовый шаблон выглядит так:

@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
    }
}

1 Ответ

0 голосов
/ 09 октября 2019

Ваш 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, построенный 9 октября 2019 года" показывает использование@CartesianProductTest аннотация сегодня:

enter image description here

Возможно, вам нужно переключиться в темный режим ...

...