2016-12-13 55 views
13

我在寫我使用TemporaryFolder規則的JUnit4測試。它似乎與@Rule和@ClassRule都可以正常工作。 Junit @Rule和@ClassRule有什麼區別?爲什麼我應該使用一個而不是另一個?Junit @規則和@ClassRule

回答

23

當你在一個類中有多個測試方法時,區分就變得很清楚了。

A @ClassRule在其中任何測試方法之前都運行其before()方法。然後運行所有的測試方法,最後是規則的方法after()。因此,如果您在班級中有五種測試方法,則before()after()仍然每次只能運行一次。

@ClassRule適用於靜態方法,因此具有固有的所有限制。

A @Rule導致通過規則的apply()方法運行測試,該方法可以在運行目標方法之前和之後執行任何操作。如果您有五種測試方法,則將規則的apply()稱爲五次,作爲每種方法的包裝。

使用@ClassRule來設置一些可以被所有測試方法重用的東西,如果您可以在靜態方法中實現這一點的話。

使用@Rule可以爲每種測試方法設置需要重新創建或重置的內容。

1

@Rule不能設置爲在@BeforeClass之前運行。

雖然@ClassRule必須是靜態方法。