JUnit中的多个规则

11

我在一个测试类中定义了两个规则,但奇怪的是一次只有最后一个被定义的规则起作用。

@Rule public ExpectedException exception = ExpectedException.none();    
@Rule public TemporaryFolder folder= new TemporaryFolder();

我真的想不出来如何定义两个或多个规则并将它们分别使用。


“只有其中一个在工作”是什么意思?您能提供更多的示例代码,展示您如何在测试代码中使用规则,并说明哪些部分没有正常工作吗? - Claas Wilke
如果我同时定义了RulesTest,并且在一个测试中我使用了folder.something(),而在另一个测试中使用了exception.expect(ArrayIndexOutOfBoundsException.class),那么异常规则将不起作用,因为它是先定义的。 - jtkSource
1
我在这两行代码中没有看到错误 -- 这应该可以工作。你能否请发一下你整个测试类的代码? - Michael Tamm
1个回答

16

我曾遇到同样的问题,我发现在这种情况下您可以使用 RuleChain,像这样:

public TemporaryFolder temp;
public ExpectedException thrown;

@Rule
public TestRule chain =
    RuleChain.outerRule(temp = new TemporaryFolder())
             .around(thrown = ExpectedException.none());

你可以在这里看到另一个例子,也可以参考RuleChain javadoc


2
<抱怨>这个可以工作,但我不明白为什么规则不能按照声明的顺序累积和执行。在每个测试类中,我想使用第二个规则时都必须定义这个链吗?而且它真的是一个链吗?看起来更像是一个层次结构。</抱怨> - Jeff Lowery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接