這兩個註釋都用來表示在當前測試類的每個Test方法之前應該執行帶註釋的方法。BeforeClass(Junit 4)和BeforeEach(Junit5)之間的區別
那麼我們爲什麼要將註釋從更改爲@BeforeClass - Junit 4至@BeforeEach Junit 5?
還有什麼額外的,已添加在junit 5,我失蹤了?
其他註釋的類似情況。
這兩個註釋都用來表示在當前測試類的每個Test方法之前應該執行帶註釋的方法。BeforeClass(Junit 4)和BeforeEach(Junit5)之間的區別
那麼我們爲什麼要將註釋從更改爲@BeforeClass - Junit 4至@BeforeEach Junit 5?
還有什麼額外的,已添加在junit 5,我失蹤了?
其他註釋的類似情況。
添加的主要功能是對Test Instance Lifecycle進行更細粒度的控制,例如通過@TestInstance
註釋。我認爲這是更改舊的@Before
和@BeforeClass
註釋名稱的原因之一。
舊(JUnit4)@Before
和新(JUnit5)@BeforeEach
是在它們被執行類似重新之前每@Test
方法在測試類。所以如果你的班級有10種測試方法,@BeforeEach
方法會執行10次。
老(JUnit4)@BeforeClass
和新(JUnit5)@BeforeAll
很相似,它們都只是執行一次,在任何類中的測試。所以即使你的班級有10次測試,@BeforeAll
方法也只執行一次。
在@BeforeClass
重命名爲@BeforeEach
的問題中提出的建議因此是不正確。
有關更多信息,另請參閱this question關於@Before,@BeforeClass,@BeforeEach和@BeforeAll之間的區別。
有一些相關的變化需要先用@TestInstance(Lifecycle.PER_CLASS)
對測試類進行註釋。這將爲每個測試類而不是每個方法創建一個新的測試實例。
因此,您可以將@BeforeAll
和@AfterAll
用於非靜態方法以及接口默認方法。它還允許您在@Nested
測試類中使用@BeforeAll
和@AfterAll
。
如果您使用Lifecycle.PER_CLASS
您必須記住,如果您的測試依賴於存儲在實例變量中的狀態,則您可能必須重置@BeforeEach
和@AfterEach
中的狀態。
不,這不是BeforeClass的目的。閱讀javadoc。但名稱已經改變,因爲......他們認爲新名稱更好。由於它是一個新的,不兼容的版本,爲什麼不更改名稱? –
'@ Before'被重命名爲'@ BeforeEach'(並且'@ BeforeClass'被重命名爲'@ BeforeAll')。正如你已經提到的那樣,它們是「在每種測試方法之前執行的」。所以這是一個很好的新名字。 –
感謝您檢查此內容。 BeforeClass也用於在類中的任何測試方法之前運行一次,因此兩者都是相同的。這是如果他們剛剛改變了名字。我想知道他們是否在新註釋中添加了任何額外的東西 – Niraj