我正在实现一个自定义 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)
相关问题,编写注释接口的实现有什么缺点吗?