BDD與單元測(cè)試相關(guān)問(wèn)題介紹
java的單元測(cè)試原理
原理描述
@RunWith是什么?
不同的測(cè)試工具有不同的單測(cè)規(guī)則,原理基本如上段所述。我們比較常用的單測(cè)框架有junit,而且junit的不同版本其語(yǔ)法規(guī)則也不一樣。比如junit3,junit4,junit5.不能混用的原因就是他們有不同的語(yǔ)法解析過(guò)程。用的不對(duì)等價(jià)于白用。
所以@RunWith表示junit版本比較多的情況下指定運(yùn)行的junit版本。我們開(kāi)發(fā)中比較常見(jiàn)的有@RunWith(SpringRunner.class)、@RunWith(SpringJUnit4ClassRunner.class)、@RunWith(SpringJUnit5ClassRunner.class)等。在不指定@RunWith的時(shí)候會(huì)創(chuàng)建一個(gè)默認(rèn)簡(jiǎn)單的單測(cè)構(gòu)造器,然后直接去執(zhí)行測(cè)試用例。@RunWith的作用是為了解決版本問(wèn)題。但是有時(shí)候沒(méi)有版本問(wèn)題就不需要添加這個(gè)注解。
單元測(cè)試和Spring的整合
什么是行為驅(qū)動(dòng)測(cè)試
我的理解是單元測(cè)試只能針對(duì)具體的函數(shù)或者接口,但是我們的業(yè)務(wù)往往是相互連接,而且錯(cuò)綜復(fù)雜的。逐個(gè)對(duì)函數(shù)進(jìn)行單測(cè)只能保證單個(gè)函數(shù)沒(méi)有問(wèn)題,但當(dāng)方法組合成業(yè)務(wù)的時(shí)候,很難保證系統(tǒng)整體上沒(méi)有問(wèn)題。
??????? 比如:
??????? 對(duì)于接口 A、B、C.......的隨機(jī)組合,按不同順序去請(qǐng)求接口,那么系統(tǒng)是否會(huì)產(chǎn)生一些出乎意料的結(jié)果?
所以,行為驅(qū)動(dòng)測(cè)試是以業(yè)務(wù)人員的視角進(jìn)行測(cè)試。
如何實(shí)現(xiàn)BDD
市面上比較常用的BDD框架是cucumber 。
先做一個(gè)demo嘗嘗鮮!
1、idea安裝cucumber插件。(單元測(cè)試的main主函數(shù)從此觸發(fā))

引入maven依賴(lài)
核心解析包<dependency><groupId>io.cucumbergroupId><artifactId>cucumber-javaartifactId><version>7.1.0version>dependency><dependency><groupId>io.cucumbergroupId><artifactId>cucumber-springartifactId><version>6.9.0version>dependency>單測(cè)包<dependency><groupId>io.cucumbergroupId><artifactId>cucumber-junitartifactId><version>6.9.0version><scope>testscope>dependency>
2、編寫(xiě)feature腳本
cumuber默認(rèn)的feature腳本路徑是test\resources目錄,如果沒(méi)有,我們創(chuàng)建resources目錄,我們創(chuàng)建一個(gè)簡(jiǎn)單的add.feature

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

隨便寫(xiě)點(diǎn),括號(hào)表示傳入的參數(shù)。
3、編寫(xiě)測(cè)試用例

4、執(zhí)行單測(cè)
右鍵我們的feature文件


5、與spring的整合
BDD存在的問(wèn)題
comuber不能mock,因?yàn)樗捎玫膉unit不是同一junit。
就到這里吧,冬天來(lái)了,注意不要感冒流鼻涕!
