1. BDD與單元測試相關(guān)問題介紹

        共 1695字,需瀏覽 4分鐘

         ·

        2021-12-23 15:30

        java的單元測試原理

        原理描述

        java進(jìn)程的啟動依賴于唯一的main函數(shù),java中的junit采用插件隱藏main函數(shù)的方式,我們右鍵運(yùn)行某測試用例。其本質(zhì)上傳入的是測試用例的路徑。而插件啟動的main函數(shù)通過args去接受傳入的用例路徑,并解析出測試用例的前后執(zhí)行方法(包括一些注解),并對具體的方法進(jìn)行排序,最后采用多線程submit任務(wù),從而進(jìn)行測試用例的執(zhí)行。在idea中選中包路徑運(yùn)行整個包下的測試用例,相當(dāng)于啟動了若干個runner任務(wù)。

        @RunWith是什么?

        不同的測試工具有不同的單測規(guī)則,原理基本如上段所述。我們比較常用的單測框架有junit,而且junit的不同版本其語法規(guī)則也不一樣。比如junit3,junit4,junit5.不能混用的原因就是他們有不同的語法解析過程。用的不對等價(jià)于白用。

        所以@RunWith表示junit版本比較多的情況下指定運(yùn)行的junit版本。我們開發(fā)中比較常見的有@RunWith(SpringRunner.class)、@RunWith(SpringJUnit4ClassRunner.class)、@RunWith(SpringJUnit5ClassRunner.class)等。在不指定@RunWith的時(shí)候會創(chuàng)建一個默認(rèn)簡單的單測構(gòu)造器,然后直接去執(zhí)行測試用例。@RunWith的作用是為了解決版本問題。但是有時(shí)候沒有版本問題就不需要添加這個注解。

        單元測試和Spring的整合

        因?yàn)楹唵蔚臏y試用例沒辦法針對Spring的函數(shù)進(jìn)行調(diào)用,尤其是依賴反轉(zhuǎn)、aop這些能力。所以需要將spring的能力接納過來。因?yàn)閟pring核心的是啟動了一個start()方法,所以我們可以繞過spring項(xiàng)目的main函數(shù)而直接去走start方法,然后做一些變動就可以將spring提供的能力整合到單元測試框架中。

        什么是行為驅(qū)動測試

        我的理解是單元測試只能針對具體的函數(shù)或者接口,但是我們的業(yè)務(wù)往往是相互連接,而且錯綜復(fù)雜的。逐個對函數(shù)進(jìn)行單測只能保證單個函數(shù)沒有問題,但當(dāng)方法組合成業(yè)務(wù)的時(shí)候,很難保證系統(tǒng)整體上沒有問題。

        ??????? 比如:

        ??????? 對于接口 A、B、C.......的隨機(jī)組合,按不同順序去請求接口,那么系統(tǒng)是否會產(chǎn)生一些出乎意料的結(jié)果?

        所以,行為驅(qū)動測試是以業(yè)務(wù)人員的視角進(jìn)行測試。

        如何實(shí)現(xiàn)BDD

        市面上比較常用的BDD框架是cucumber 。

        先做一個demo嘗嘗鮮!

        1、idea安裝cucumber插件。(單元測試的main主函數(shù)從此觸發(fā))

        引入maven依賴

        核心解析包<dependency>    <groupId>io.cucumbergroupId>    <artifactId>cucumber-javaartifactId>    <version>7.1.0version>dependency><dependency>    <groupId>io.cucumbergroupId>    <artifactId>cucumber-springartifactId>    <version>6.9.0version>dependency>單測包<dependency>    <groupId>io.cucumbergroupId>    <artifactId>cucumber-junitartifactId>    <version>6.9.0version>    <scope>testscope>dependency>

        2、編寫feature腳本

        cumuber默認(rèn)的feature腳本路徑是test\resources目錄,如果沒有,我們創(chuàng)建resources目錄,我們創(chuàng)建一個簡單的add.feature

        ???? 這時(shí)候,我們的測試用例后邊都是白色的背景色。我們需要創(chuàng)建相關(guān)的java文件。我們alt+enter。進(jìn)行創(chuàng)建。

        隨便寫點(diǎn),括號表示傳入的參數(shù)。


        3、編寫測試用例

        4、執(zhí)行單測

        右鍵我們的feature文件

        5、與spring的整合

        在和spring整合這塊,cumuber提供了cumuber-spring的jar包。只需要我們在寫代碼的時(shí)候添加上注解@CucumberContextConfiguration即可。

        BDD存在的問題

        comuber不能mock,因?yàn)樗捎玫膉unit不是同一junit。


        就到這里吧,冬天來了,注意不要感冒流鼻涕!



        瀏覽 70
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 小早川怜子XXXXAⅤ在线 | 天天日天天干天天操天天射 | 欧美午夜理伦三级在线观看潘金莲 | 中文字幕av久久波多野结 | 中文字幕AⅤ在线 |