我正在实现自定义JUnit Runner,并希望为其添加其他报告功能。我还想尽可能多地重用现有的JUnit基础架构,因此实现RunListener
听起来像个好主意。 RunListener
的方法采用Description
或Failure
,两者都没有明显的方法来添加有关测试用例的其他信息。
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)
相关问题,编写注释接口的实现有什么缺点吗?