26
在JUnit測試用例中,由@Rule
註釋的字段必須是公開的。它打破了常見的Java編碼約定(所有類成員變量都不應該公開)。爲什麼JUnit需要這個?爲什麼JUnit中的@Rule註釋字段必須公開?
的文檔@Rule
:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java
在JUnit測試用例中,由@Rule
註釋的字段必須是公開的。它打破了常見的Java編碼約定(所有類成員變量都不應該公開)。爲什麼JUnit需要這個?爲什麼JUnit中的@Rule註釋字段必須公開?
的文檔@Rule
:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/Rule.java
的JUnit運行需要反思訪問現場運行規律。如果該字段是私密的,則訪問將拋出IllegalAccessException
。
另一種選擇是讓運行者在運行規則之前將私人訪問權限修改爲公共訪問權限。但是,如果啓用了安全管理器,則可能會導致問題。
如果你想避免在您的測試類的公共字段,你可以從JUnit的4.11註釋方法,返回一個Rule
與@Rule
或@ClassRule
。
+1您也可以使用@Rule註解一個方法,這樣可以避免這個問題。你應該把這個添加到你的答案中。 –
謝謝馬修,我不知道。 4.11顯然是新功能。 –
@KErlandsson - 你完全確定嗎?這就是JUnit API文檔所陳述的:「一個字段必須是公共的,而不是靜態的,並且是TestRule的子類型(首選)或MethodRule」 – dziki