junit 测试执行顺序_JUnit 5中的测试执行顺序
junit 測(cè)試執(zhí)行順序
一般實(shí)踐認(rèn)為,自動(dòng)化測(cè)試應(yīng)能夠獨(dú)立運(yùn)行且無(wú)特定順序,并且測(cè)試結(jié)果不應(yīng)依賴于先前測(cè)試的結(jié)果。 但是在某些情況下,可以證明特定的測(cè)試執(zhí)行順序是正確的,尤其是在集成或端到端測(cè)試中。
默認(rèn)情況下,在JUnit 5中,測(cè)試方法的執(zhí)行在構(gòu)建之間是可重復(fù)的,因此具有確定性,但是該算法是故意不明顯的(作為庫(kù)狀態(tài)的作者)。 幸運(yùn)的是,可以使用內(nèi)置方法定購(gòu)器或通過(guò)創(chuàng)建自定義定購(gòu)器來(lái)調(diào)整執(zhí)行順序以滿足我們的需求。
org.junit.jupiter.api.TestMethodOrder
為了更改測(cè)試執(zhí)行順序,我們需要使用org.junit.jupiter.api.TestMethodOrder注釋測(cè)試類,并將方法排序器的類型作為參數(shù)傳遞。 從JUnit 5.4開(kāi)始,有三個(gè)內(nèi)置的方法排序器: OrderAnnotation , Alphanumeric和Random 。 通過(guò)實(shí)現(xiàn)org.junit.jupiter.api.MethodOrderer接口,我們還可以輕松創(chuàng)建自己的自定義方法org.junit.jupiter.api.MethodOrderer器。
使用
package pl.codeleak.samples.junit5.basics; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; @TestMethodOrder (MethodOrderer.OrderAnnotation. class ) class TestExecutionOrderWithOrderAnnotation { @Order ( 1 ) @Test void aTest() {} @Order ( 2 ) @Test void bTest() {} @Order ( 3 ) @Test void cTest() {} }字母數(shù)字順序
@TestMethodOrder (MethodOrderer.Alphanumeric. class ) class AlphanumericTestExecutionOrder { @Test void aTest() {} @Test void bTest() {} @Test void cTest() {} }隨機(jī)排序
如果要確保生成之間的方法執(zhí)行順序不確定,則隨機(jī)排序可能很有用。
@TestMethodOrder (MethodOrderer.Random. class ) class AlphanumericTestExecutionOrder { @Test void aTest() {} @Test void bTest() {} @Test void cTest() {} }隨機(jī)方法訂購(gòu)者使用System.nanoTime()作為種子,但是可以使用junit.jupiter.execution.order.random.seed配置屬性對(duì)其進(jìn)行更改。 此屬性的值應(yīng)返回可以使用Long.valueOf(String)進(jìn)行轉(zhuǎn)換的任何String 。
配置種子的一種方法是在junit-platform.properties配置文件中提供配置屬性:
junit.jupiter.execution.order.random.seed= 42定制訂購(gòu)
可以通過(guò)實(shí)現(xiàn)org.junit.jupiter.api.MethodOrderer接口并將其作為@TestMethodOrder的參數(shù)來(lái)創(chuàng)建自定義方法@TestMethodOrder 。
下面的示例是一個(gè)方法排序器,它按名稱的長(zhǎng)度對(duì)方法進(jìn)行排序:
MethodLengthOrderer class implements MethodOrderer { private Comparator<MethodDescriptor> comparator = Comparator.comparingInt(methodDescriptor -> methodDescriptor.getMethod().getName().length()); @Override public void orderMethods(MethodOrdererContext context) { context.getMethodDescriptors().sort(comparator); } }并使用:
@TestMethodOrder (MethodLengthOrderer. class ) class CustomTestExecutionOrder { @Test void aTest() {} @Test void abTest() {} @Test void abcTest() {} }摘要
在某些情況下,有一種在JUnit 5中調(diào)整測(cè)試執(zhí)行順序的方法會(huì)很有用,我很高興看到此功能。 我相信在大多數(shù)情況下,內(nèi)置方法訂購(gòu)者將綽綽有余。 如果沒(méi)有,那么有一種實(shí)現(xiàn)自定義方法的簡(jiǎn)便方法。
在GitHub上找到本文中使用的示例(以及更多): https : //github.com/kolorobot/junit5-samples/tree/master/junit5-basics
翻譯自: https://www.javacodegeeks.com/2019/03/test-execution-order-junit-5.html
junit 測(cè)試執(zhí)行順序
總結(jié)
以上是生活随笔為你收集整理的junit 测试执行顺序_JUnit 5中的测试执行顺序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 苹果手机看电视不能旋转屏幕了怎么办
- 下一篇: 徐徐图之原句出处 徐徐图之原句出处及解释