在我使用的测试框架中,有一个Precondition
注释,该注释接受一个类并在运行时在其中调用call()
方法。
测试框架的核心模块:
前提条件注释
public @interface Precondition {
Class<? extends Scriptlet<? extends Context>> scriptlet();
String value() default Constants.EMPTY_STRING;
}
脚本
public interface Scriptlet<V> extends Callable<V> {
}
语境
public interface Context {
}
如果我将以下前提条件类传递给
Precondition
批注,将不会有任何错误。CommonContextInit前提条件类
class CommonContextInit implements Scriptlet<DataModel>{
CommonContextInit(Object script,String value){
}
@override
public DataModel call() throws Exception {
return null;
}
}
脚本
@Precondition(scriptlet=CommonContextInit.class)
但是我想使
CommonContextInit
成为通用的,用户可以在其中传递scriptlet的类型,因此我如下更改了CommonContextInit
类CommonContextInit前提条件类
class CommonContextInit<T extends Context> implements Scriptlet<T>{
CommonContextInit(Object script,String value){
}
@override
public T call() throws Exception {
return null;
}
}
但是这里的问题是我不知道如何将类传递给
Precondition
。我尝试了以下内容,但看起来完全是无效的语法。// ERROR: The annotation @Precondition is disallowed for this location.
@Precondition(scriptlet=CommonContextInit<DataModel>.class)
如何将
Class
的CommonContextInit<DataModel>
传递给Precondition
? 最佳答案
扩展我的评论,您将拥有类似
class DataModelInstance extends CommonContextInit<DataModel> implements Scriptlet<DataModel>{
DataModelInstance(Object script,String value){
super(script, value);
}
//other overrides
}
然后呼叫
@Precondition(scriptlet=DataModelInstance.class)