亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JUnit測試控制@Test執行順序的方法有哪些

發布時間:2021-09-06 13:51:28 來源:億速云 閱讀:390 作者:chen 欄目:開發技術

這篇文章主要介紹“JUnit測試控制@Test執行順序的方法有哪些”,在日常操作中,相信很多人在JUnit測試控制@Test執行順序的方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JUnit測試控制@Test執行順序的方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • JUnit測試控制@Test執行順序

    • 第一種

    • 第二種(推薦)

    • 第三種

  • Junit測試方法保證執行順序

    • 當使用默認排序時

JUnit測試控制@Test執行順序

第一種

@FixMethodOrder(MethodSorters.JVM)

從上到下 執行@Test

第二種(推薦)

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

按方法名字順序執行@Test

第三種

@FixMethodOrder(MethodSorters.DEFAULT)

默認方法,不可預期

Junit測試方法保證執行順序

由于需要做自動化測試,所以需要比較完善的單元測試。但是又因為某些測試的執行依賴另外一個測試產生的結果,所以希望所寫的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執行順序的方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤冈县| 甘泉县| 正宁县| 奎屯市| 吉木乃县| 新蔡县| 溧阳市| 北京市| 长宁县| 榆树市| 南丹县| 新竹县| 宿迁市| 遂溪县| 赤水市| 和田县| 高碑店市| 亚东县| 中卫市| 霍林郭勒市| 凉山| 英吉沙县| 古浪县| 嘉荫县| 正蓝旗| 太仓市| 霍州市| 景洪市| 淅川县| 宁安市| 若尔盖县| 富源县| 苏尼特右旗| 滦平县| 淳化县| 太湖县| 伊吾县| 浦城县| 五家渠市| 六安市| 佛冈县|