一随夸、摘要
本片博文將介紹unittest框架的一些輕便有效的特性旁赊,在我們的測試中經(jīng)秤倒睿可以用到
如果有一些測試方法不想執(zhí)行,如果有些測試方法在某些條件下不執(zhí)行?該當(dāng)如何蹄殃?
如果有些方法未在unittest框架下編寫携茂,又想使用unittest框架執(zhí)行,該當(dāng)如何诅岩?
如果想自定義一個(gè)執(zhí)行順序該當(dāng)如何?
二带膜、代碼實(shí)例
如果有一些測試方法不想執(zhí)行吩谦,如果有些測試方法在某些條件下不執(zhí)行?該當(dāng)如何?
執(zhí)行結(jié)果會是:
三膝藕、代碼解析
unittest為我們提供了多種跳過測試用例的方法式廷,當(dāng)我們的大量用例在不同場景下可能有些用例并不想執(zhí)行,例如回歸測試芭挽、例如新部署的一套環(huán)境需要對主功能進(jìn)行驗(yàn)證滑废、例如有些用例需要具備條件才執(zhí)行等等場景我們便需要這些跳過用例的方法,當(dāng)然我們可以將那些不想執(zhí)行的用例注釋掉袜爪,但也可以采用如下裝飾器給測試方法加上注解
@unittest.skip(reason)? # 無條件跳過蠕趁,reason是用來描述為什么跳過它
@unittest.skipIf(condition,reason) # 有條件跳過,當(dāng)condition滿足的情況下便跳過此裝飾器裝飾的用例
@unittest.skipUnless(condition,reason) # 有條件跳過辛馆,當(dāng)condition滿足的情況下便要執(zhí)行此裝飾器裝飾的用例俺陋,與上一個(gè)相反
@unittest.expectedFailure # 用于標(biāo)記期望執(zhí)行失敗的測試方法,如果該測試方法執(zhí)行失敗,則被認(rèn)為成功腊状,如果執(zhí)行成功诱咏,則被認(rèn)為失敗
并且當(dāng)測試模塊被裝飾器裝飾為跳過時(shí),它的setUpModule()和tearDownModule()也就不會執(zhí)行了
同樣的當(dāng)測試類被裝飾器裝飾為跳過時(shí)缴挖,它的setUpClass()和tearDownClass()也就不會執(zhí)行了
一樣的當(dāng)測試方法被裝飾器裝飾為跳過時(shí)袋狞,它的setUp()和tearDown()也就不會執(zhí)行了
如果想自定義一個(gè)執(zhí)行順序該當(dāng)如何?
在前邊的文章中介紹了多種執(zhí)行用例的方式映屋,首先unittest.main()這種方式啟動單元測試去執(zhí)行苟鸯,各測試方法的執(zhí)行順序是按所有方法名的字符串的ASCII碼排序后的順序執(zhí)行的
如果想自定義順序執(zhí)行,我們需要使用TestSuite(), 它的執(zhí)行順序是按照我們addTest()的次序進(jìn)行執(zhí)行的
如果有些方法未在unittest框架下編寫秧荆,又想使用unittest框架執(zhí)行倔毙,該當(dāng)如何?
當(dāng)我們的一些老代碼并沒建立在unittest的體系中乙濒,但是如果想使用unittest去執(zhí)行它陕赃,又不想將所有老代碼轉(zhuǎn)換到unittest的時(shí)候,unittest為我們提供了unittest.FunctionTestCase(testFunc,setUp=None,tearDown=None,description=None)
假設(shè)我們有個(gè)測試方法如下
它并沒有建立在unittest框架中颁股,只是一個(gè)獨(dú)立的函數(shù)么库,那么我們可以創(chuàng)建等價(jià)的測試用例
然而并不建議使用這種方法,如果大量的這種代碼出現(xiàn)甘有,將使得測試代碼比較混亂難以維護(hù)诉儒,和重構(gòu)