您好,登錄后才能下訂單哦!
這篇文章主要介紹“JUnit測試控制@Test執行順序的方法有哪些”,在日常操作中,相信很多人在JUnit測試控制@Test執行順序的方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JUnit測試控制@Test執行順序的方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
JUnit測試控制@Test執行順序
第一種
第二種(推薦)
第三種
Junit測試方法保證執行順序
當使用默認排序時
@FixMethodOrder(MethodSorters.JVM)
從上到下 執行@Test
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
按方法名字順序執行@Test
@FixMethodOrder(MethodSorters.DEFAULT)
默認方法,不可預期
由于需要做自動化測試,所以需要比較完善的單元測試。但是又因為某些測試的執行依賴另外一個測試產生的結果,所以希望所寫的test case按照自己希望的順序來執行。
隨后博主查閱資料發現了FixMethodOrder注解,可以有三種方式可以控制test執行順序。
/** * Sorts the test methods by the method name, in lexicographic order, with {@link Method#toString()} used as a tiebreaker */ NAME_ASCENDING(MethodSorter.NAME_ASCENDING), /** * Leaves the test methods in the order returned by the JVM. Note that the order from the JVM may vary from run to run */ JVM(null), /** * Sorts the test methods in a deterministic, but not predictable, order */ DEFAULT(MethodSorter.DEFAULT);
大概上就是上面三種,很多大佬的博客上都對這幾種有講解以及示例,博主在這里就不啰嗦了,下面說一下我的一些疑問以及發現。
@FixMethodOrder(MethodSorters.DEFAULT) public class testDemo{ @Test public void B(){ System.out.println("b"); } @Test public void C(){ System.out.println("c"); } @Test public void A(){ System.out.println("a"); } @Test public void AB(){ System.out.println("ab"); } @Test public void AC(){ System.out.println("ac"); } @Test public void A1(){ System.out.println("a1"); } }
輸出
a
b
c
a1
ab
ac
這只是博主眾多測試結果中的一個,實際上與API中描述的“but not predictable”有所出入,執行的順序是可預期的。
因為觀察到,名字短的總排在前面,ascii碼小的總在前面,所以博主猜測有可能順序跟方法名字的字符串的hashcode有關的,于是加上hashcode方法輸出之后,得到結果:
方法A:65
方法B:66
方法C:67
方法A1:2064
方法AB:2081
方法AC:2082
所以可以得出結論,當單元測試使用默認執行順序的時候,測試方法執行的順序是跟測試方法名字符串的hashcode大小線性相關。
Junit執行時應該是把所有的有@test注釋的方法存到一個容器里,然后交由jvm去一一執行(博主還沒來得及仔細去研讀Junit的源碼,這是本人的猜測)。那么問題來了,這一系列的方法是在同一個線程下還是多個線程一起執行的呢?
其實從測試的執行順序可以控制不難猜出,多個測試方法是串行執行的,但是實踐才是檢驗真理的唯一標準。
代碼就不貼了,有興趣的同學可以自己寫一下看看,就是在第二順位執行的方法那里讓他休眠一下,觀察是否也會阻塞第三個方法。
最終的結果也證明了猜想。
到此,關于“JUnit測試控制@Test執行順序的方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。