日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Python > 正文

python 測試框架 unittest

2019-11-11 05:40:48
字體:
來源:轉載
供稿:網友

摘要這里將從(pythontesting.net)陸續編譯四篇 Python 測試框架的簡介,分別為:doctest、unittest、nose 和 pytest。本篇為第二篇:unittest

目錄[-]

unittest 概覽舉個例子啟動測試Test Discovery測試環境

unittest 與 doctest 一樣也是 Python 發行版自帶的包。如果你聽說過 PyUnit(OSC 開源項目頁面中就有 PyUnit 的頁面),那么這倆其實是同一個東西——PyUnit 是 unittest 的曾用名,因為 PyUnit 最早也是來源于 Kent 和 Erich 的 JUnit(xUnit 測試框架系列的 java 版本)

unittest 概覽


上一篇介紹的 doctest 不管是看起來還是用起來都顯得十分簡單,可以與源碼寫在一起,比較適合用作驗證性的功能測試。而本篇的 unittest 從名字上看,它是一個單元測試框架;從官方文檔的字數上看,它的能力應該比 doctest 強一些。

使用 unittest 的標準流程為:

從 unittest.TestCase 派生一個子類在類中定義各種以 “test_” 打頭的方法通過 unittest.main() 函數來啟動測試

unittest 的一個很有用的特性是 TestCase 的 setUp()tearDown() 方法,它們提供了為測試進行準備和掃尾工作的功能,聽起來就像上下文管理器一樣。這種功能很適合用在測試對象需要復雜執行環境的情況下。

舉個例子


這里依舊使用上篇中那個極簡的例子:unnecessary_math.py 文件中有一個multiply() 函數,功能與 * 操作符完全一樣。

test_um_test.py:

import unittestfrom unnecessary_math import multiplyclass TestUM(unittest.TestCase):    def setUp(self):        pass    def test_number_3_4(self):        self.assertEqual(multiply(3,4),12)    def test_string_a_3(self):        self.assertEqual(multiply('a',3),'aaa')if __name__ == '__main__':    unittest.main()

這個例子里,我們使用了 assertEqual() 方法。unittest 中還有很多類似的 assert 方法,比如 NotEqualIs(Not)NoneTrue(False)Is(Not)Instance 等針對變量值的校驗方法;另外還有一些如 assertRaises()assertRaisesRegex() 等針對異常、警告和 log 的檢查方法;以及如assertAlmostEqual() 等一些奇怪的方法。

較詳細的 assert 方法可以參考 unittest 的文檔頁面。

啟動測試


上例中的結尾處,我們定義了一個對 unittest.main() 的調用,因此這個腳本是可以直接運行的:

$ python test_um_test.py..--------------------------------------Ran 2 tests in 0.01sOK

同樣 -v 參數是可選的,也可以在 unittest.main() 函數里直接指定:verbosity=1

Test Discovery


這個分段標題我暫時沒想到好的翻譯方法,就先不翻了。

Test Discovery 的作用是:假設你的項目文件夾里面四散分布著很多個測試文件。當你做回歸測試的時候,一個一個地執行這些測試文件就太麻煩了。TestLoader.discover() 提供了一個可以在項目目錄下自動搜索并運行測試文件的功能,并可以直接從命令行調用:

$ cd PRoject_directory$ python -m unittest discover

discover 可用的參數有 4 個(-v -s -p -t),其中 -s-t 都與路徑有關,如上例中提前 cd 到項目路徑的話這倆參數都可以無視;-v 喜聞樂見;-p--pattern 的縮寫,可用于匹配某一類文件名。

測試環境


當類里面定義了 setUp() 方法的時候,測試程序會在執行每條測試項前先調用此方法;同樣地,在全部測試項執行完畢后,tearDown() 方法也會被調用。驗證如下:

import unittestclass simple_test(unittest.TestCase):    def setUp(self):        self.foo = list(range(10))    def test_1st(self):        self.assertEqual(self.foo.pop(),9)    def test_2nd(self):        self.assertEqual(self.foo.pop(),9)if __name__ == '__main__':    unittest.main()

注意這里兩次測試均對同一個實例屬性 self.foo 進行了 pop() 調用,但測試結果均為 pass,即說明,test_1sttest_2nd 在調用前都分別調用了一次 setUp()

那如果我們想全程只調用一次 setUp/tearDown 該怎么辦呢?就是用 setUpClass()tearDownClass() 類方法啦。注意使用這兩個方法的時候一定要用 @classmethod 裝飾器裝飾起來:

import unittestclass simple_test(unittest.TestCase):    @classmethod    def setUpClass(self):        self.foo = list(range(10))    def test_1st(self):        self.assertEqual(self.foo.pop(),9)    def test_2nd(self):        self.assertEqual(self.foo.pop(),8)if __name__ == '__main__':    unittest.main()

這個例子里我們使用了一個類級別的 setUpClass() 類方法,并修改了第二次 pop() 調用的預期返回值。運行結果顯示依然是全部通過,即說明這次在全部測試項被調用前只調用了一次 setUpClass()

再往上一級,我們希望在整個文件級別上只調用一次 setUp/tearDown,這時候就要用 setUpModule()tearDownModule() 這兩個函數了,注意是函數,與 TestCase 類同級:

import unittestdef setUpModule():    passclass simple_test(inittest.TestCase):    ...

一般 assert*() 方法如果拋出了未被捕獲的異常,那么這條測試用例會被記為 fail,測試繼續進行。但如果異常發生在 setUp() 里,就會認為測試程序自身存在錯誤,后面的測試用例和tearDown() 都不會再執行。即,tearDown() 僅在setUp() 成功執行的情況下才會執行,并一定會被執行。

最后,這兩個方法的默認實現都是什么都不做(只有一句 pass),所以覆蓋的時候直接寫新內容就可以了,不必再調用父類的此方法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
欧美日韩国产在线看| 91精品国产综合久久久久久| 欧美日韩第一区日日骚| 国产黄色精品| av免费观看国产| 日韩欧美三级视频| 在线黄色国产电影| 欧美日韩在线综合| 日韩在线高清| 亚洲欧美中文字幕在线观看| 国产成人精品999| 欧美.日韩.国产.一区.二区| 91精品高清| 亚洲三级av| 视频一区视频二区中文| 国产一区精品| 一级特黄aaa大片在线观看| 精品视频1区2区3区| 日韩精品不卡一区二区| 精品久久九九| 国产成人精品综合网站| 日韩.欧美.亚洲| 久久久综合精品| 日韩欧美在线中文字幕| 中文字幕日韩欧美| 精品一二线国产| 国产一二三精品| 日韩欧美在线视频日韩欧美在线视频| av一级在线| 伊人亚洲视频| 日韩视频1区| 天天综合天天添夜夜添狠狠添| 91精品免费在线观看| 日韩在线观看精品| 欧美日韩在线不卡一区| 亚洲三级av| 亚洲最新免费视频| 黄色片免费在线| 久久久久久99精品| 精品在线一区二区三区| 国产三级做爰在线观看| 日韩欧美中文字幕一区| 黄色片免费看| 国产福利一区二区| 中文字幕亚洲区| 在线观看91精品国产入口| 国产一级在线免费观看| 日本免费看黄| 一区二区三区精品在线| 亚洲视频日韩| 欧美日韩在线播放一区| 国产综合精品在线| 在线精品日韩| 日韩欧美亚洲国产| 精品久久香蕉国产线看观看gif | 国产999精品在线观看| 精品国产1区2区3区| 日韩在线中文| 国产第一页在线播放| 91久久中文| 欧美 日韩 国产在线观看| 在线观看免费国产小视频| 欧美日韩国产在线播放| 一区在线视频观看| 91精品婷婷国产综合久久| 国产黄色在线网站| 精品视频资源站| 视频一区中文字幕国产| 99精品人妻国产毛片| 日韩精品中文在线观看| 蜜臀国产一区| 国产在线高潮| 日韩在线视频二区| 日韩中文字幕国产| 91精品国产91综合久久蜜臀| 精品国产网站在线观看| 中文字幕在线中文字幕二区| 91亚洲国产高清| 国产欧美 在线欧美| 午夜国产在线| 日韩在线 中文字幕| 亚洲欧洲三级| 欧美日韩高清一区二区不卡| 欧美激情视频一区二区三区在线播放| 午夜国产福利一区二区| 日韩欧美亚洲国产| www.eeuss影院| 久草视频观看| 日韩国产成人| 国产精品福利视频一区二区三区| 最近中文字幕第一页| 1区2区3区在线视频| 久久久99免费| 日韩一级在线视频| 中文在线一区二区| 91欧美日韩| 国产123在线| aaa欧美日韩| 精品欧美日韩在线| 91久久精品网| 精品日韩av| 精品久久久91| 欧美国产一区视频在线观看| 91www成人久久| 亚洲理论中文字幕| 日韩视频在线一区| 国产真实乱子伦精品视频| 亚洲黄色一区二区| 欧美亚洲天堂| 精品乱子伦一区二区| 日韩欧美国产黄色| 欧美精品一区二区三区在线播放| 欧美色视频一区二区三区在线观看| 一级片在线播放| 极品久久久久久| 日韩一级二级三级精品视频| 精品国产网站在线观看| 精品日韩一区二区三区免费视频| 亚洲羞羞网站| 日韩国产在线不卡视频| 欧美xxxx中国| 亚洲乱码一区av黑人高潮| 一区二区91| 国产日韩成人精品| 一区二区在线看| 日韩专区中文字幕| 日韩 欧美 亚洲| 日韩欧美一级视频| 一区二区视频在线观看免费的| 国产欧美日韩91| 国产免费久久久| 欧美一级手机免费观看片| 蜜桃久久av| 欧美 日韩 国产在线| 极品久久久久久| 黄色在线播放网站| 日韩高清不卡一区| 亚洲高清不卡一区| 中文字幕在线观看国产| 在线亚洲人成| 亚洲一区精品在线| 国产小视频在线观看| 国产在线欧美| aaa欧美日韩| 亚洲成av人片在线| 国产乱码在线观看| 欧美日韩一区二区在线视频| 欧美日韩综合色| 中文在线视频| 国产成人综合精品| 国产成人精品999在线观看| 一本久久a久久精品亚洲| 搞黄在线观看| 欧美在线日韩精品| 亚洲国产欧美久久| 国产三级在线播放| 午夜精品一区二区三区免费视频| 国产黄色在线免费观看| 国产又粗又猛又爽又黄91精品| 91精品久久久久久久久| 亚洲一级二级| 日本国产在线视频| 91精品国产综合久久久蜜臀粉嫩| 国产中文在线| 欧美亚洲免费高清在线观看| 日韩免费电影网站| 日韩精品欧美| 精品视频三区| 1区2区在线| 国产高清大尺度一区二区不卡| 日韩欧美亚洲区| 亚洲 欧美综合在线网络| 精品播放一区二区| 一区二区三区在线|网站| 人人做人人澡人人爽欧美| 亚洲人成欧美中文字幕| 91一区二区| 日本精品在线中文字幕| av免费网站在线观看| 中文字幕精品一区二| 午夜高潮免费视频| 久久手机免费观看| 亚洲国产无线乱码在线观看| 搞黄在线观看| 欧美一级久久| 亚洲.国产.中文慕字在线| 欧美国产一区视频在线观看| 中文字幕久久精品| 欧美日韩性视频| 一本久久a久久精品亚洲| 欧美日韩激情一区二区三区| 欧美一级免费在线观看| 国产资源在线观看| 国产裸体歌舞团一区二区| 欧美,日韩,国产在线| 在线观看一区日韩| 国产一级粉嫩xxxx| 日韩午夜黄色| 一区二区三区在线播| 国产日韩三级| 91精品国产99| 91久久久久| 亚洲免费精品视频| 日韩欧美中文字幕在线视频| 久久99蜜桃精品久久久久小说| 亚亚洲欧洲精品| 久久 天天综合| 国产日产一区二区三区| 国产v日产∨综合v精品视频| 人成免费在线视频| 精品日韩av一区二区| 免费视频二区| 欧美日韩在线视频一区| 在线看av的网址| 久久久久久欧美| 色国产在线视频| 亚洲精品欧美二区三区中文字幕| 被陌生人带去卫生间啪到腿软| 中文字幕在线精品| 国产在线精品日韩| 国产激情久久久| 久久久99久久| 欧美日韩视频不卡| 国产视频中文字幕| 午夜国产在线| 日韩精品在线第一页| 中文字幕人成乱码在线观看| 国产欧美高清在线| www.精品av.com| 色综合婷婷久久| 欧美日本精品| 精品av中文字幕在线毛片| 亚洲伊人婷婷| 在线不卡一区二区| 日韩欧美高清在线视频| 国产日韩av一区二区| 亚洲第一视频在线观看| 国产亚洲污的网站| 不卡在线一区二区| 影音先锋中文字幕在线观看| 最新中文字幕在线播放| 亚洲a一级视频| 91精品在线国产| 欧美三级视频在线| 日韩一级免费在线观看| 亚洲大片免费看| 91精品在线免费观看| 一区视频在线播放| 一区二区中文视频| 日本一欧美一欧美一亚洲视频| 91精品视频观看| 欧美日韩国产黄色| 国产最新在线| 日韩视频免费直播| 中文欧美字幕免费| 久久99精品国产| 91精品在线观看入口| 国产日韩精品久久久| 欧美久久久久久蜜桃| 欧美 日韩 国产 在线观看| 欧美区高清在线| 国产在线拍揄自揄拍| 日本精品在线中文字幕| 偷窥国产亚洲免费视频| 免费国产成人看片在线| 一区二区91| 国产一级久久久| 91精品国产自产在线观看永久∴| 欧美日韩在线国产| 日韩亚洲欧美中文在线| √新版天堂资源在线资源| 国产欧美自拍一区| 日韩不卡中文字幕| 精品999在线| 日韩视频免费直播| 大香一本蕉伊线亚洲网| 九九视频精品免费| 国产日韩精品在线看| 高清不卡一区二区| 欧美日韩高清| 午夜成人鲁丝片午夜精品| 久久中文精品| 欧美日韩视频免费看| www.三级.com| 日本熟女一区二区| 亚洲社区在线| 日本亚洲欧美| 午夜福利一区二区三区| 欧美中文字幕在线观看视频| 91精品国产色综合久久不卡蜜臀| 欧美变态tickling挠脚心| 91亚洲欧美| 日韩.com| 日韩a一区二区| 国产字幕在线看| 在线观看av的网站| 国产超级va在线视频| 美女黄a一级视频| 成年人黄国产| 日韩中文欧美| 在线观看国产福利视频| 中文字幕在线中文字幕二区| 综合图区亚洲白拍在线| 国产字幕在线看| 精品在线网站观看| 亚洲欧洲在线观看av| 欧美日韩高清在线| 午夜一区二区视频| 国产一卡二卡3卡4卡四卡在线| 国产1卡2卡三卡四卡网站| 日韩精品不卡一区二区| 亚洲成年网站在线观看| 亚洲免费福利视频| 精品久久久视频| 精品一区二区在线观看视频| 日韩欧美99| 亚洲综合三区| 欧美在线日韩在线| 中文字幕一区免费| 中文字幕亚洲欧美| 欧美在线日韩精品| 色妇色综合久久夜夜| 日韩高清在线不卡| 日韩中文字幕久久| 69av亚洲| 91精品免费观看| 亚洲第一视频| 欧美不卡视频一区发布| 日韩福利视频导航| 国产一区免费视频| 国产91欧美| 欧美日韩在线观看成人| 日韩欧美高清在线| 国产69精品久久app免费版| 精品视频1区2区3区| 国产资源中文字幕| 一区二区三区鲁丝不卡| 99国产成 人 综合 亚洲欧美| 91精品国产99| 欧美日韩一级视频| av一区在线| 亚洲中文字幕一区| 91精品国产综合久久久久| 综合激情一区| 成人一区而且| 中文字幕在线导航| 在线观看精品国产| 欧美日韩中文字幕视频| 91精品婷婷国产综合久久| 精品国产欧美| 久久激情中文| 国产99在线|亚洲| 韩日中文字幕第一页| 日韩精品手机在线| 日韩在线视频在线观看| 亚洲一区在线观看免费| 欧美日韩在线三级| 亚洲一区导航| 日韩精品一区二区三区视频播放| 92久久精品| 不卡福利视频| 久久99蜜桃精品久久久久小说| 精人妻一区二区三区| 国产乱国产乱老熟300| 日韩黄色在线播放| 精品999视频| 精品国产91| 亚洲最新免费视频| 国产无遮挡在线视频免费观看| 日韩字幕在线观看| 在线视频色在线| 欧美日韩亚洲综合| 国产福利不卡| 亚洲热在线观看| 精品乱人伦一区二区三区| 狠狠色噜噜狠狠狠狠97| 国产午夜精品视频免费不卡69堂| 在线不卡日本| 樱花草www在线观看| 高清不卡一区二区| 中文字幕久久av| 久久在线91| 日韩不卡av| 日韩中文字幕| 欧美日韩在线不卡视频| 日韩国产一区| 日韩亚洲欧美中文在线| 亚洲欧美伊人| 久久久综合av| 国产乱国产乱300精品| 黄色片网站在线| 国产欧美日韩中文久久| 国产95在线|亚洲| 91精品国产自产在线| 日韩视频精品在线观看| 欧美 日韩 国产在线| 一区二区视频在线| 日韩精品在线看| 国产99在线|亚洲| 国产欧美日韩综合精品|