精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用PyHamcrest執(zhí)行健壯的單元測試

開發(fā) 測試
在測試金字塔的底部是單元測試。單元測試每次只測試一個代碼單元,通常是一個函數(shù)或方法。

[[256592]]

 使用此框架編寫斷言,提高開發(fā)測試的準(zhǔn)確性。

測試金字塔的底部是單元測試。單元測試每次只測試一個代碼單元,通常是一個函數(shù)或方法。

通常,設(shè)計單個單元測試是為了測試通過一個函數(shù)或特定分支的特定執(zhí)行流程,這使得將失敗的單元測試和導(dǎo)致失敗的 bug 對應(yīng)起來變得容易。

理想情況下,單元測試很少使用或不使用外部資源,從而隔離它們并使它們更快。

單元測試套件通過在開發(fā)過程的早期發(fā)現(xiàn)問題來幫助維護高質(zhì)量的產(chǎn)品。有效的單元測試可以在代碼離開開發(fā)人員機器之前捕獲 bug,或者至少可以在特定分支上的持續(xù)集成環(huán)境中捕獲 bug。這標(biāo)志著好的和壞的單元測試之間的區(qū)別:好的測試通過盡早捕獲 bug 并使測試更快來提高開發(fā)人員的生產(chǎn)力。壞的測試降低了開發(fā)人員的工作效率。

當(dāng)測試附帶的特性時,生產(chǎn)率通常會降低。當(dāng)代碼更改時測試會失敗,即使它仍然是正確的。發(fā)生這種情況是因為輸出的不同,但在某種程度上是因為它不是函數(shù)契約function’s contract的一部分。

因此,一個好的單元測試可以幫助執(zhí)行函數(shù)所提交的契約。

如果單元測試中斷,那意味著該契約被違反了,應(yīng)該(通過更改文檔和測試)明確修改,或者(通過修復(fù)代碼并保持測試不變)來修復(fù)。

雖然將測試限制為只執(zhí)行公共契約是一項需要學(xué)習(xí)的復(fù)雜技能,但有一些工具可以提供幫助。

其中一個工具是 Hamcrest,這是一個用于編寫斷言的框架。最初是為基于 Java 的單元測試而發(fā)明的,但它現(xiàn)在支持多種語言,包括 Python

Hamcrest 旨在使測試斷言更容易編寫和更精確。

  1. def add(a, b):
  2.     return a + b
  3.  
  4. from hamcrest import assert_that, equal_to
  5.  
  6. def test_add():
  7.     assert_that(add(2, 2), equal_to(4))  

這是一個用于簡單函數(shù)的斷言。如果我們想要斷言更復(fù)雜的函數(shù)怎么辦?

  1. def test_set_removal():
  2.     my_set = {1, 2, 3, 4}
  3.     my_set.remove(3)
  4.     assert_that(my_set, contains_inanyorder([1, 2, 4]))
  5.     assert_that(my_set, is_not(has_item(3)))

注意,我們可以簡單地斷言其結(jié)果是任何順序的 124,因為集合不保證順序。

我們也可以很容易用 is_not 來否定斷言。這有助于我們編寫精確的斷言,使我們能夠把自己限制在執(zhí)行函數(shù)的公共契約方面。

然而,有時候,內(nèi)置的功能都不是我們真正需要的。在這些情況下,Hamcrest 允許我們編寫自己的匹配器matchers

想象一下以下功能:

  1. def scale_one(a, b):
  2.     scale = random.randint(0, 5)
  3.     pick = random.choice([a,b])
  4.     return scale * pick

我們可以自信地斷言其結(jié)果均勻地分配到至少一個輸入。

匹配器繼承自 hamcrest.core.base_matcher.BaseMatcher,重寫兩個方法:

  1. class DivisibleBy(hamcrest.core.base_matcher.BaseMatcher):
  2.     def __init__(self, factor):
  3.         self.factor = factor
  4.  
  5.     def _matches(self, item):
  6.         return (item % self.factor) == 0
  7.  
  8.     def describe_to(self, description):
  9.         description.append_text('number divisible by')
  10.         description.append_text(repr(self.factor))

編寫高質(zhì)量的 describe_to 方法很重要,因為這是測試失敗時顯示的消息的一部分。

  1. def divisible_by(num):
  2.     return DivisibleBy(num)

按照慣例,我們將匹配器包裝在一個函數(shù)中。有時這給了我們進一步處理輸入的機會,但在這種情況下,我們不需要進一步處理。

  1. def test_scale():
  2.     result = scale_one(3, 7)
  3.     assert_that(result,
  4.                 any_of(divisible_by(3),
  5.                 divisible_by(7)))

請注意,我們將 divisible_by 匹配器與內(nèi)置的 any_of 匹配器結(jié)合起來,以確保我們只測試函數(shù)提交的內(nèi)容。

在編輯這篇文章時,我聽到一個傳言,取 “Hamcrest” 這個名字是因為它是 “matches” 字母組成的字謎。嗯…

  1. >>> assert_that("matches", contains_inanyorder(*"hamcrest")
  2. Traceback (most recent call last):
  3.   File "<stdin>", line 1, in <module>
  4.   File "/home/moshez/src/devops-python/build/devops/lib/python3.6/site-packages/hamcrest/core/assert_that.py", line 43, in assert_that
  5.     _assert_match(actual=arg1, matcher=arg2, reason=arg3)
  6.   File "/home/moshez/src/devops-python/build/devops/lib/python3.6/site-packages/hamcrest/core/assert_that.py", line 57, in _assert_match
  7.     raise AssertionError(description)
  8. AssertionError:
  9. Expected: a sequence over ['h', 'a', 'm', 'c', 'r', 'e', 's', 't'] in any order
  10.       but: no item matches: 'r' in ['m', 'a', 't', 'c', 'h', 'e', 's']

經(jīng)過進一步的研究,我找到了傳言的來源:它是 “matchers” 字母組成的字謎。

  1. >>> assert_that("matchers", contains_inanyorder(*"hamcrest"))
  2. >>>

如果你還沒有為你的 Python 代碼編寫單元測試,那么現(xiàn)在是開始的好時機。如果你正在為你的 Python 代碼編寫單元測試,那么使用 Hamcrest 將允許你使你的斷言更加精確,既不會比你想要測試的多也不會少。這將在修改代碼時減少誤報,并減少修改工作代碼的測試所花費的時間。

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2023-07-26 08:58:45

Golang單元測試

2017-01-16 12:12:29

單元測試JUnit

2017-01-14 23:26:17

單元測試JUnit測試

2017-01-14 23:42:49

單元測試框架軟件測試

2017-03-23 16:02:10

Mock技術(shù)單元測試

2012-05-17 09:09:05

Titanium單元測試

2013-06-04 09:49:04

Spring單元測試軟件測試

2024-10-16 16:09:32

2021-03-28 23:03:50

Python程序員編碼

2010-03-04 15:40:14

Python單元測試

2011-05-16 16:52:09

單元測試徹底測試

2011-06-14 15:56:42

單元測試

2022-05-12 09:37:03

測試JUnit開發(fā)

2020-08-18 08:10:02

單元測試Java

2023-08-02 13:59:00

GoogleTestCTest單元測試

2021-05-05 11:38:40

TestNGPowerMock單元測試

2011-07-04 18:16:42

單元測試

2020-05-07 17:30:49

開發(fā)iOS技術(shù)

2011-08-11 13:02:43

Struts2Junit

2011-06-14 15:39:46

單元測試
點贊
收藏

51CTO技術(shù)棧公眾號

久久久久久九九九九九| 成人高清dvd| 蜜臀精品一区二区三区| 国产精品免费99久久久| 欧美性生交大片免费| 免费成人看片网址| 波多野结衣视频免费观看| 久久国产精品亚洲人一区二区三区 | 欧美 激情 在线| 精品成人一区二区三区免费视频| 亚洲专区免费| 在线观看免费高清视频97| 啊啊啊国产视频| 麻豆网在线观看| 久久国产免费看| 欧美精品久久久久久久| 国产精品1000部啪视频| 24小时成人在线视频| 一区二区三区中文字幕精品精品 | 免费在线看黄色片| 亚洲av激情无码专区在线播放| 日本美女视频一区二区| 欧美超级免费视 在线| www.男人天堂| 精品久久毛片| 亚洲综合999| 午夜欧美性电影| 亚洲免费不卡视频| 日本亚洲视频在线| 久久久久久久久亚洲| 亚洲精品午夜视频| 国产劲爆久久| 欧美二区乱c少妇| 一区二区传媒有限公司| 成人在线免费看片| 欧美国产精品中文字幕| 国产精品手机视频| 91精品国产乱码久久久| 美日韩精品视频| 欧美激情在线观看| 精品在线观看一区| 国产伦一区二区三区| 日韩欧美色综合| 手机在线看福利| 3344国产永久在线观看视频| 国产亚洲综合色| 国产精品一区二区免费| 91精品视频免费在线观看| 亚洲一区二区毛片| 欧美黄色片免费观看| 女同久久另类69精品国产| 亚洲国产合集| 日韩电影在线观看永久视频免费网站 | av在线天堂播放| 91麻豆精东视频| 成人在线观看网址| 精品毛片在线观看| 国产麻豆成人精品| 成人精品在线观看| 怡春院在线视频| 日本不卡高清视频| 日韩女优在线播放| 9i精品福利一区二区三区| 一本一本久久| 2019中文字幕免费视频| 国产一级av毛片| 黄色成人在线网站| 欧美高清不卡在线| 成人免费毛片东京热| 亚洲激情久久| 欧美成人免费网| 中文字幕手机在线观看| 欧美亚洲精品在线| 一区二区欧美久久| 亚洲色图日韩精品| 日韩成人av在线资源| 日韩精品视频在线播放| 亚洲最大成人网站| 丝袜美腿综合| 亚洲人成自拍网站| 亚洲一二三精品| 亚洲一区二区三区| 欧美黑人性猛交| 欧美三日本三级少妇99| 免费日韩av片| 国产精品一区av| 国产乱人乱偷精品视频| 国产精品一二三四区| 99视频日韩| 婷婷久久久久久| 国产丝袜欧美中文另类| 亚洲精品自在在线观看| 免费a在线看| 亚洲综合激情小说| 红桃av在线播放| 亚洲国产尤物| 91精品国产综合久久久久久漫画| 91福利视频免费观看| 欧美福利在线播放网址导航| 亚洲欧美制服第一页| 欧美无人区码suv| 国产一区二区三区四区五区传媒| 日韩中文在线观看| 久草视频免费播放| 久久精品人人| 成人日韩av在线| 粉嫩av一区二区夜夜嗨| 久久精子c满五个校花| 国产又爽又黄ai换脸| 97在线视频免费观看完整版| 欧美伊人精品成人久久综合97 | 免费成人你懂的| 99精彩视频在线观看免费| 午夜小视频在线播放| 久久综合九色综合97婷婷女人 | 黄色网址在线播放| 亚洲日本一区二区三区| 国产69精品久久久久999小说| 日韩电影大全网站| 欧美成人a视频| 国产传媒国产传媒| 99精品在线观看| 97超级碰碰碰久久久| 亚洲性生活大片| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产综合欧美在线看| 成人福利在线| 亚洲高清视频的网址| 手机看片一级片| 欧美日韩导航| 欧美刺激性大交免费视频| 亚洲色成人www永久网站| 国产不卡在线一区| 中文字幕欧美日韩一区二区| 美女福利一区二区三区| 欧美大胆人体bbbb| 999精品视频在线观看播放| 亚洲一区欧美激情| 成人av片网址| 激情在线小视频| 欧美视频完全免费看| 国产真实乱人偷精品| 亚洲影视一区二区三区| 国产精品综合不卡av| 青青久在线视频| 五月天激情小说综合| 亚洲天堂网站在线| 久久亚洲在线| 国产美女扒开尿口久久久| 男女视频在线观看免费| 精品福利在线视频| 久久久久中文字幕亚洲精品 | 精品免费99久久| 中文字幕av免费在线观看| 精品一区二区三区免费毛片爱| 日韩aⅴ视频一区二区三区| 性欧美18xxxhd| 日韩精品久久久久| 99久在线精品99re8热| 成人激情av网| 99热久久这里只有精品| 视频一区日韩| 欧美老肥婆性猛交视频| 国产xxxx孕妇| 一区二区三区国产精品| 乳色吐息在线观看| 国产综合自拍| 国产精品9999久久久久仙踪林| a篇片在线观看网站| 日韩视频永久免费| 青青草原在线免费观看视频| 国产成人精品在线看| 日韩精品视频在线观看视频 | 老司机午夜在线视频| 欧美精品乱人伦久久久久久| 三区四区在线观看| 美国av一区二区| 婷婷亚洲婷婷综合色香五月| 国产精品一区二区免费福利视频| 日韩在线视频导航| 综合久久中文字幕| 亚洲人精品一区| 国产av一区二区三区传媒| 99re国产精品| 日韩精品福利视频| 色999韩欧美国产综合俺来也| 久久视频在线播放| 99精品免费观看| 精品毛片网大全| 日本免费网站视频| 成人白浆超碰人人人人| 性生交免费视频| 激情文学一区| 亚洲欧美成人一区| 久久久亚洲欧洲日产| 国产精品视频男人的天堂| 性欧美videos高清hd4k| 亚洲欧美日韩视频一区| 99久久精品免费看国产交换| 欧美体内谢she精2性欧美| 久久99久久99精品免费看小说| 91在线码无精品| 亚洲18在线看污www麻豆| 国产精品久久久久久模特| 精品久久免费观看| 免费成人结看片| 成人av影视在线| 国产精品.xx视频.xxtv| 欧美亚洲国产精品| 亚洲h片在线看| 中文字幕在线精品| 五月天婷婷在线播放| 91精品免费在线观看| 中文字幕av资源| 欧美日韩免费看| 黄色一级视频免费| 久久精品无码一区二区三区| 欧美极品jizzhd欧美仙踪林| 精品一区二区三区影院在线午夜 | 一根才成人网| 欧美激情在线视频二区| 黄色免费在线观看| 中文精品99久久国产香蕉| 头脑特工队2免费完整版在线观看| 91精品国产高清一区二区三区| 日韩av免费播放| 黑人巨大精品欧美一区免费视频| 欧美黑吊大战白妞| 自拍偷拍亚洲综合| 中文字幕91视频| 国产调教视频一区| 性高潮久久久久久久| 久久婷婷国产综合精品青草| 亚洲天堂美女视频| 国产福利一区在线观看| 亚洲免费在线播放视频| 蜜桃视频在线观看一区二区| 久久午夜夜伦鲁鲁一区二区| 美女爽到呻吟久久久久| av免费播放网址| 一本久久综合| 国产精品沙发午睡系列| 国产精品美女久久久| 欧美日韩精品在线一区二区 | 久久久久久久久久毛片| 久久99精品久久久久久国产越南 | 99久精品国产| 国产熟女高潮一区二区三区| 99麻豆久久久国产精品免费优播| 美女露出粉嫩尿囗让男人桶| 成人av电影在线网| 粉嫩av懂色av蜜臀av分享| 91在线观看地址| 中文字幕一区二区三区人妻不卡| 91首页免费视频| 色一情一交一乱一区二区三区| 国产亚洲一区二区三区四区| 日本乱子伦xxxx| 中文在线资源观看网站视频免费不卡| 一级黄色片网址| 国产精品久久久久影院老司| 欧美大片xxxx| 亚洲va欧美va人人爽午夜| 久久露脸国语精品国产91| 一本大道久久a久久综合婷婷| 手机av免费观看| 欧美精品欧美精品系列| 蜜臀久久精品久久久久| 亚洲男人天堂2024| 91露出在线| 欧美日本黄视频| 亚洲校园激情春色| 国产一区二区视频在线观看| 精品国产不卡一区二区| 精品乱码一区二区三区| 欧美伦理在线视频| 精品91一区二区三区| 最新国产乱人伦偷精品免费网站| 男人天堂成人在线| 国产综合一区二区| 日韩在线观看免费高清完整版| 日本精品一二区| 亚洲一级免费视频| 欧美人禽zoz0强交| 精品免费在线观看| 中文字幕777| 亚洲精品在线观看视频| 免费国产在线视频| 欧美成人免费在线视频| 深夜成人影院| 91视频免费进入| 国产一区二区在线| www.亚洲成人网| 日韩成人免费在线| 蜜桃视频无码区在线观看| 国产无遮挡一区二区三区毛片日本| 黑人操日本美女| 色噜噜狠狠色综合欧洲selulu| 国产又粗又猛又黄又爽无遮挡| 亚洲国产欧美在线成人app| 香蕉视频在线播放| 国产91精品久| 久久九九精品视频| 亚洲国产精品视频一区| 亚洲裸体俱乐部裸体舞表演av| 天天干天天玩天天操| 久久免费视频色| 久久老司机精品视频| 欧美日韩在线播放三区| 久久米奇亚洲| 久久久久中文字幕2018| av一级久久| 日韩视频在线观看国产| 国产一区二区高清| 久久aaaa片一区二区| 中文字幕一区在线观看视频| 成人免费毛片视频| 亚洲高清一二三区| 性欧美高清come| 国产中文字幕日韩| 精品av一区二区| 漂亮人妻被中出中文字幕| 99久久精品免费看| 久久久久久久黄色| 日韩一区二区影院| 麻豆传媒视频在线观看免费| 国产精品久久久久久久久久99| 日韩欧美四区| 日本网站免费在线观看| 成人免费三级在线| 精品99在线观看| 日韩欧美亚洲另类制服综合在线 | 麻豆成人在线看| 成人在线中文| 色综合电影网| 日本亚洲天堂网| 伊人影院综合网| 欧亚洲嫩模精品一区三区| 日本五码在线| 欧美中文字幕在线观看| 亚州av一区| 国产又大又硬又粗| 久久久www成人免费毛片麻豆| 国产 日韩 欧美 在线| 日韩精品日韩在线观看| 国模冰冰炮一区二区| 日韩高清国产一区在线观看| 免费成人美女在线观看.| 99久久99久久精品免费| 欧美色图天堂网| 黄色网页网址在线免费| 91嫩草视频在线观看| 国内精品久久久久久久影视麻豆| 91人人澡人人爽| 天天射综合影视| 韩国福利在线| 国产精品爽爽爽| 亚洲综合激情在线| 最好看的中文字幕| 亚洲国产三级在线| 外国精品视频在线观看| 欧美一级黄色网| 久久99蜜桃| 亚洲第一狼人区| 亚洲男女一区二区三区| 日本国产在线观看| 国产97免费视| 天天综合网91| 国产十八熟妇av成人一区| 91福利国产成人精品照片| 老司机精品视频在线观看6| 国产精品免费在线| 视频在线观看国产精品| 永久免费未视频| 精品国产髙清在线看国产毛片| 国产夫妻在线播放| 亚洲精蜜桃久在线| 国产成人在线视频网站| 久久久久久少妇| 色婷婷综合成人av| 国产成人在线中文字幕| 福利在线一区二区三区| 亚洲一区二区影院| 国产视频三级在线观看播放| 亚洲一区二区免费| 亚洲免费综合| 97成人资源站| 亚洲欧美第一页| 精品一区二区三区亚洲| 丝袜老师办公室里做好紧好爽| 国产精品美女久久久久av爽李琼| 亚洲国产一二三区| 国产精品久久久久久av下载红粉 | 亚洲激情av在线| 久久精品蜜桃| 99三级在线| 捆绑紧缚一区二区三区视频| 国内免费精品视频| 大胆人体色综合| 欧美日韩一区二区综合 |