[java] Junit @Rule如何工作?



Answers

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規則。

以下是一些有用的鏈接供參考:

Question

我想為大量代碼編寫測試用例,我想知道JUnit @Rule註釋功能的細節,以便我可以使用它來編寫測試用例。 請提供一些很好的答案或鏈接,通過一個簡單的例子詳細說明其功能。




tl; dr它是如何工作的:JUnit將你的測試方法包裝在Statement對像中,所以statement.Execute()運行你的測試。 然後,不要直接調用statement.Execute()來運行測試,JUnit會使用@Rule註釋將Statement傳遞給TestRule。 TestRule的“應用”函數返回一個新的Statement,並在您的測試中給出Statement。 新的Statement的Execute()方法可以調用測試語句的execute方法(或不調用它,或者多次調用它),並且可以在它之前和之後做任何想做的事情。 現在JUnit有一個新的Statement,它不僅僅是運行測試,它還可以在最終調用Execute之前再次將它傳遞給任何更多的規則。






Related