【发布时间】:2013-04-11 07:38:07
【问题描述】:
尝试在 groovy 文件中创建规则的一些变体,我想到@Rule 不描述声明,而是描述分配。 因此,跑步者在加载测试时,会尝试每条规则以进行正确的分配。
//Correct variants:
@Rule
public ErrorCollector collector1= new ErrorCollector();
public ErrorCollector collector2= null;
@Rule
collector2= new ErrorCollector();
public ErrorCollector collector3;
@Rule
collector3= new ErrorCollector();
// incorrect variants:
@Rule
public ErrorCollector collector4= null;
@Rule
public ErrorCollector collector5;
@Rule
public ErrorCollector collector5=somethingThatIsNotRule;
@Rule
public ErrorCollector collector5=anotherRule;
但是,后来我想到了一些自相矛盾的变体:
//these lines are not only taken by the runner, but also passed without errors:
public ErrorCollector collector6;
{
@Rule
collector6= null;
}
public ErrorCollector collector7=null;
{
@Rule
collector7= null;
}
它的逻辑是什么?
这似乎是 Runner 中的一个错误 - runner 在构建测试之前进行了过多的检查。
【问题讨论】:
-
不可能,如果你看一下
@Rule注释,它的目标是FILED&METHOD。您的矛盾变体不应编译,因为本质上它是实例初始化程序块内的字段分配,而不是字段声明。 -
好吧,我只能假设 Eclipse 编译器中存在错误。这段代码在 IntelliJ Idea 中无法编译
-
是的,对不起,我忘了提到这一切都是在 groovy 文件中完成的——groovy 不像 java 那样严格——已编辑。
标签: java groovy junit junit-rule junit-runner