将有关测试的其他信息从JUnit Runner传递给RunListener

时间:2014-10-14 22:25:25

标签: java junit junit4 junit-runner

我正在实现自定义JUnit Runner,并希望为其添加其他报告功能。我还想尽可能多地重用现有的JUnit基础架构,因此实现RunListener听起来像个好主意。 RunListener的方法采用DescriptionFailure,两者都没有明显的方法来添加有关测试用例的其他信息。

Description实际上是最终的,因为它没有公共构造函数,因此无法覆盖它。有一个私有的uniqueId字段可能会被反射误用,但那真的很糟糕。

稍微不那么狡猾的变体可能是为我需要的所有信息定义注释,并将此注释的实现附加到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)

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

0 个答案:

没有答案