0

我正在实现一个自定义 JUnit Runner,并希望为其添加额外的报告功能。我还想尽可能多地重用现有的 JUnit 基础设施,所以实现一个RunListener听起来不错的主意。RunListener采用 aDescription或 a 的方法Failure,两者都没有明显的方法来添加有关测试用例的附加信息。

Description实际上是最终的,因为它没有公共构造函数,因此无法覆盖它。有一个私有uniqueId字段可以通过反射被滥用,但这真的很hacky。

一个稍微不那么 hacky 的变体可能是为我需要的所有信息定义注释,并将此注释的实现附加到Description. 有没有人做过这样的事情,或者有没有推荐的方法来处理这个问题?

这是我目前正在尝试的示例:

public @interface StepMetadata {
    int lineNumber();
    String keyword();
    String title();
}

public class StepMetadataImpl implements StepMetadata {
    private final int lineNumber;
    private final String keyword;
    private final String title;

    // constructor and accessor methods

    @Override
    public Class<? extends Annotation> annotationType() {
        return StepMetadata.class;
    }
}


// inside the Runner
Description.createTestDescription(className, stepTitle, new StepMetadataImpl(...))

// inside the RunListener
StepMetadata step = description.getAnnotation(StepMetadata.class)

相关问题,编写注释接口的实现有什么缺点吗?

4

0 回答 0