如何Junit的@rule工作?(How does Junit @Rule work?)

2019-06-21 06:15发布

我想要写测试用例批量的代码,我想知道的JUnit的细节@Rule注释功能,这样我可以用它来编写测试用例。 请提供一些很好的答案或者链接,通过一个简单的例子给出了其功能的详细说明。

Answer 1:

规则是用来增加它适用于测试类中的所有测试的附加功能,但在一个更通用的方法。

例如, ExternalResource之前和测试方法之后执行码,而不必使用@Before@After 。 使用ExternalResource而非@Before@After给出了更好的代码重用的机会; 相同的规则可以从两个不同的测试类使用。

该设计是基于: 在JUnit的拦截

欲了解更多信息,请参阅JUnit的维基:规则 。



Answer 2:

Junit的规则对AOP的原则(面向方面​​编程)工作。 它拦截从而所述测试方法提供了一个机会之前或特定测试方法执行之后做一些东西。

采取下面的代码的示例:

public class JunitRuleTest {

  @Rule
  public TemporaryFolder tempFolder = new TemporaryFolder();

  @Test
  public void testRule() throws IOException {
    File newFolder = tempFolder.newFolder("Temp Folder");
    assertTrue(newFolder.exists());
  }
} 

每次执行上述试验方法时,将创建的临时文件夹和它得到该方法的执行之后被删除。 这是JUnit提供一个彻头彻尾的现成规则的例子。

类似的行为也可以通过创建我们自己的规则来实现的。 JUnit提供了TestRule接口,可以实现创建自己的Junit的规则。

下面是引用一个有用的链接:

  • http://www.codeaffine.com/2012/09/24/junit-rules/


Answer 3:

我发现这篇文章介绍了@Rule做得相当好,尤其是检查出的最后一节“的序列事件中的细节”



Answer 4:

TL;博士它是如何工作:包装的JUnit测试方法Statement对象这样的Statement.execute()运行测试。 然后,而不是调用的Statement.execute()直接运行测试,JUnit的传递声明与@rule注释的TestRule。 该TestRule的“应用”功能返回给你的测试声明一个新的声明。 新语句的execute()方法可以调用测试语句的执行方法(或没有,或称之为多次),并尽一切可能之前和之后希望。 现在的JUnit有一个新的声明说并不仅仅是运行测试,它可以再次传递给更多的规则,最后调用执行之前。



文章来源: How does Junit @Rule work?