1

我正在尝试将Jira JUnit 集成的测试管理移植到 JUnit5。此模块生成测试运行的 JSON 报告,并使用测试方法上的注释将结果与 Jira 票证相关联,例如

从 TestExecutionListener 我不确定检索 TestCase 注释的最佳方法是什么。

我使用 TestIdentifier.getSource 查看了反射,并进行了操作以重建方法签名并从那里提取注释,但这种方法感觉很笨拙。

我遇到了这篇文章Allow extensions to register TestExecutionListeners,它提出了以下建议:

建议:让您的扩展发布 WebDriver bean 的会话 id,例如

String sessionId = ...;
extensionContext.publishReportEntry("webDriverSessionId", sessionId)

在您的TestExecutionListener 中,实现reportingEntryPublished 并将其存储在以TestIdentifier 作为键的Map 中。在 executionFinished 中报告测试结果以及来自此 Map 的值。

这种方法看起来很有希望,但我想确保没有另一种方法不需要扩展和测试执行侦听器。有没有办法直接在TestExecutionListener中检索测试方法注解信息?

4

2 回答 2

0

似乎您无法从中获取测试注释,TestExecutionListener但您可以实现TestWatcherAfterEachCallback获取自定义注释值,如下所示:

import org.junit.jupiter.api.extension.AfterEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.TestWatcher;

public class MyExtention implements TestWatcher, AfterEachCallback {


    @Override public void testSuccessful(ExtensionContext context) {
        if (context.getElement().isPresent() && context.getElement().get().isAnnotationPresent(MyCustomAnnotation.class)) {
            int val = context.getElement().get().getAnnotation(MyCustomAnnotation.class).value();
            // Report on success
        }
    }

    @Override public void afterEach(ExtensionContext context) throws Exception {
        if (context.getElement().isPresent() && context.getElement().get().isAnnotationPresent(MyCustomAnnotation.class)) {
            int val = context.getElement().get().getAnnotation(MyCustomAnnotation.class).value();
            // Report each
        }
    }
}

于 2021-06-12T11:12:10.377 回答
0

@Alex,在侦听器中可能会使用以下内容... ((MethodSource) testIdentifier.source).javaMethod.getAnnotation(TestCase.class)

于 2021-02-23T22:32:21.580 回答