Nose是Python的一個(gè)第三方單元測(cè)試框架,定位是“帶插件的Unittest”,只要名稱(chēng)匹配一定的條件,都會(huì)被自動(dòng)識(shí)別為測(cè)試用例。為了兼容Unittest,所有的基于Unitest編寫(xiě)的測(cè)試用例,也會(huì)被Nose自動(dòng)識(shí)別。
比如說(shuō),不僅用例的編寫(xiě)方式可以繼承Unittest.TestCase的測(cè)試類(lèi),還可以編寫(xiě)成沒(méi)有繼承的測(cè)試類(lèi),同時(shí)Nose也支持定義函數(shù)來(lái)作為測(cè)試,而且支持Unittest所支持的用例發(fā)現(xiàn)和執(zhí)行能力。
更不要提Nose的繼任者Nose2。
Nose2的主要目的是擴(kuò)展Python的標(biāo)準(zhǔn)單元測(cè)試庫(kù)Unittest,讓編寫(xiě)和運(yùn)行測(cè)試用例變得更容易。提供豐富的插件,例如測(cè)試用例加載器、覆蓋度報(bào)告生成器、并行測(cè)試等內(nèi)置插件和第三方插件,讓單元測(cè)試變得更加完善。
它們有很多相同點(diǎn),比如都兼容Unittest,支持使用函數(shù)作為測(cè)試用例、支持子測(cè)試、擁有插件體系等等。但也有很多不同點(diǎn),比如Nose2不支持Nose所支持的所有測(cè)試用例項(xiàng)目結(jié)構(gòu)、不支持包級(jí)別的測(cè)試前置和清理函數(shù)等等。
但Nose和Nose2在用例編寫(xiě)、測(cè)試夾具、子測(cè)試上做出改進(jìn),已經(jīng)能讓日常用例編寫(xiě)工作變得更加容易和靈活。同時(shí)又引入插件體系,進(jìn)一步將單元測(cè)試框架的能力提升了一個(gè)大大的臺(tái)階,這讓很多在基礎(chǔ)測(cè)試功能之上的高階功能的實(shí)現(xiàn)和共享成為了可能,因此眾多開(kāi)發(fā)者對(duì)它們情有獨(dú)鐘。
學(xué)習(xí)建議
綜上對(duì)比和歸納總結(jié),Unittest做為一個(gè)Python標(biāo)準(zhǔn)庫(kù),和Python版本綁定,非常穩(wěn)定,不用擔(dān)心兼容性的問(wèn)題。
如果要學(xué)習(xí)一個(gè)單元測(cè)試框架,建議從Unittest開(kāi)始,因?yàn)槟憧梢越佑|到loader、suite、runner這樣的組件,對(duì)理解測(cè)試框架更有幫助,學(xué)習(xí)好Unittest以后,再學(xué)習(xí)Nose2或者Pytest這樣更高級(jí)的框架,能有效提升編程效率。
很多同學(xué)在網(wǎng)上看到一些說(shuō)Unittest過(guò)時(shí)或Unittest不高級(jí)的言論就開(kāi)始批判,顯然是不對(duì)的。Unittest是其他Python單元測(cè)試框架的基礎(chǔ),沒(méi)學(xué)好Unittest,其他的框架勢(shì)必也學(xué)不好。
以上內(nèi)容為大家介紹了Python的第三方單元測(cè)試框架,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.em-kal.com/