日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
單元測試框架進(jìn)行自動(dòng)化測試

最近參與的一個(gè)項(xiàng)目里我把單元測試放到很重要的位置并且也發(fā)現(xiàn)了一些問題。順便介紹一下單元測試框架進(jìn)行自動(dòng)化測試的方面

10年積累的做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有廉江免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

這不是一篇嚴(yán)謹(jǐn)?shù)募夹g(shù)文章。只是一些個(gè)人不成熟的感想。

在實(shí)際開發(fā)過程中,我發(fā)現(xiàn)在單元測試代碼中經(jīng)常會(huì)出現(xiàn)兩種情況:***種就是在測試代碼中炫耀編程技巧,第二種就是敷衍了事,你不是讓我通過測試么?好,我就寫一個(gè)用例,一定能通過的那種,然后告訴你,OK,我的測試通過了。我覺得,這就是對單元測試的意義沒有真正理解的表現(xiàn)。

到底單元測試是做什么用的?我想,在說明這個(gè)問題之前,我先說說我所理解的測試到底是做什么用的。

所謂的測試,是一種產(chǎn)品質(zhì)量保證的手段。我按照需求規(guī)格說明書制造了一件產(chǎn)品,那么誰來確保這個(gè)產(chǎn)品符合了需求規(guī)格的要求呢?就是測試。它會(huì)根據(jù)需求規(guī)格說明書設(shè)計(jì)一系列的場景和用例,來對產(chǎn)品進(jìn)行測試,看看產(chǎn)品是不是真的符合所期望的需求。

要達(dá)到這個(gè)目標(biāo),其實(shí)并不十分的容易,因?yàn)橐粋€(gè)真正的系統(tǒng),情況十分復(fù)雜,里面充滿了數(shù)不清的分支、異常、邊界條件,甚至運(yùn)行環(huán)境,將這些東西組合起來,產(chǎn)生的需要測試的點(diǎn)將會(huì)是一個(gè)天文數(shù)字,在有限的時(shí)間內(nèi)做完一個(gè)充分而可靠的測試,是不可能的。

為了將充分測試變得可能,一個(gè)比較好的途徑就是分層測試。我在做運(yùn)行測試或性能測試的時(shí)候,有一個(gè)前提,就是假設(shè)整個(gè)系統(tǒng)的集成運(yùn)行已經(jīng)沒有問題了,在運(yùn)行測試或性能測試時(shí),我將不再考慮“系統(tǒng)無法正常運(yùn)行”這種場景。那么如何保證集成運(yùn)行沒問題呢?我們用集成測試來檢驗(yàn)。但是在做集成測試的時(shí)候,我們同樣要基于一個(gè)假定,就是各個(gè)模塊的功能都能夠如期正常工作。而這一點(diǎn),又是通過模塊自身的功能測試來完成的。……這樣一層層往下推,每個(gè)層次就假設(shè)它所依賴的層次沒有問題,這樣就可以減少很多場景以及由這些場景引出的額外的分支。將原先一個(gè)幾何級數(shù)的測試用例分解成可以接受的若干層次的算術(shù)級數(shù)的用例。這樣一來測試就變得有可能做好了。

而單元測試,正是這些測試的***層次——保證每個(gè)函數(shù)/方法,或者說最小功能模塊的正確性的一種測試。

通過上面的描述,我們至少清楚了這樣幾件事情:
1. 單元測試是一種測試,它不是代碼的一部分;
2. 單元測試是***層級的測試,它只保證函數(shù)的可靠性,不保證其它;
3. 單元測試應(yīng)該能保證每一個(gè)函數(shù)的可靠性。

單元測試是一種測試,所以,我們應(yīng)該以一種測試的眼光去面對它——我們要測試正常情況,邊界條件,要對它的測試目標(biāo)——函數(shù)做黑盒分析,白盒分析,選擇合適的測試數(shù)據(jù),構(gòu)建測試場景和測試環(huán)境——總之,一切測試應(yīng)該做的事情,單元測試都不應(yīng)該省略。

理論上來說,單元測試和其他測試一樣,也是可以純手工完成的:我們可以寫一段某函數(shù)的測試代碼,然后輸入我們的測試輸入,觀察測試輸出,并跟期望值做比較——事實(shí)上這種人工測試,寫了一段時(shí)間代碼的人應(yīng)該都不會(huì)陌生。但是,單元測試有一點(diǎn)特殊性,就是在一個(gè)系統(tǒng)中,函數(shù)會(huì)非常非常的多,變化也比軟件的功能頻繁的多。面對這么多的函數(shù),這么頻繁的變化,純手工測試是不現(xiàn)實(shí)的。所以,我們必須要引入單元測試框架進(jìn)行自動(dòng)化測試。注意,這里的單元測試框架只是實(shí)現(xiàn)自動(dòng)化測試的一個(gè)手段,對單元測試本身并不產(chǎn)生任何影響——沒有單元測試框架,單元測試一樣也是可以進(jìn)行的,只是會(huì)痛苦很多。

單元測試框架引入的目的只是為了自動(dòng)化單元測試,簡化單元測試的步驟。所以,對于測試代碼的編寫,我們的重點(diǎn)應(yīng)該是:1、如何搭建測試環(huán)境、測試場景;2、如何選擇測試用例;3、如何校驗(yàn)測試結(jié)果。對于測試代碼本身,應(yīng)該盡可能的簡單,能不要使用技巧盡量不要使用,我們的目的在于測試,如果測試本身過于復(fù)雜,我們不能保證測試的正確性,測試這個(gè)工作就白做了。

另外,剛剛提到單元測試是對函數(shù)的測試,因此,測試必須是以函數(shù)為單位的。每個(gè)函數(shù)應(yīng)該擁有自己單獨(dú)的一個(gè)測試,但是在這個(gè)測試中,我們應(yīng)該針對這個(gè)函數(shù)的各個(gè)方面:正常的、異常的、邊界的……等等,各個(gè)方面進(jìn)行完善的測試,這樣我們才能保證這個(gè)函數(shù)的功能是如我們所愿的。但是單元測試不需要負(fù)責(zé)函數(shù)的組合工作情況。那應(yīng)該是(低層次)功能測試的工作,而不是單元測試的工作。這個(gè)功能測試就是在假定所有函數(shù)都工作正常的基礎(chǔ)之上,對這些函數(shù)組合形成的功能模塊進(jìn)行測試。這種測試,視情況而定,可以使用單元測試框架,也可以使用其他自動(dòng)化測試方法或者甚至是使用純?nèi)斯y試。

另外,我還想討論一下單元測試的編寫和運(yùn)行。

絕大部分時(shí)候,單元測試的編寫,是由開發(fā)人員做的。我們在以前某次對單元測試的討論中,甚至有人認(rèn)為,單元測試必須由開發(fā)人員完成,而不應(yīng)該由獨(dú)立的測試人員完成。對于這個(gè)問題,我是這樣看的:測試是一種針對需求的驗(yàn)證工作。如果這個(gè)需求非常清晰,清晰到開發(fā)人員之外的人都可以輕易掌握(有些日本外包發(fā)出來的函數(shù)說明書就能達(dá)到這一點(diǎn)),這時(shí)單元測試可以由獨(dú)立的測試人員完成。但是大部分情況下對于函數(shù)級別,做不到這一點(diǎn)。這時(shí)最清楚函數(shù)需求的人就是開發(fā)人員本人,在這種情況下當(dāng)然就應(yīng)該是開發(fā)人員自己編寫測試用例。但是開發(fā)人員必須搞清楚自己身兼兩個(gè)不同的角色:運(yùn)動(dòng)員(實(shí)現(xiàn)代碼)和裁判員(檢驗(yàn)代碼),在編寫測試用例的時(shí)候絕不能假定任何函數(shù)的實(shí)現(xiàn),而應(yīng)該完全按照它應(yīng)該有的需求來做。這樣才能做好單元測試這件事。很多時(shí)候單元測試形同虛設(shè),就是因?yàn)殚_發(fā)人員沒有很好的轉(zhuǎn)換自己的角色造成的。

單元測試的運(yùn)行,目前我們這個(gè)Python的項(xiàng)目比較容易,直接運(yùn)行模塊就是該模塊的單元測試,而以模塊形式import就是實(shí)際使用。對于像C++或者其他的一些語言來說,可能沒有這樣方便的形式。我們可以把測試寫在獨(dú)立的文件中,然后用makefile組合不同的項(xiàng)目和主函數(shù)來做到這一點(diǎn)。另外還有一點(diǎn)就是,實(shí)際運(yùn)行過程中可能會(huì)有一些環(huán)境,這些環(huán)境在測試時(shí)難以獲得,或者增加上去之后,就難以測試(比如網(wǎng)絡(luò)環(huán)境、數(shù)據(jù)庫環(huán)境等等),這時(shí)我們可以采用一些虛擬的環(huán)境來做到。我們把運(yùn)行時(shí)需要的環(huán)境做一個(gè)簡化的虛擬版本,然后以這個(gè)版本作為測試環(huán)境進(jìn)行測試,對于Python來說,我們可以實(shí)現(xiàn)這樣的一個(gè)庫在測試時(shí)import進(jìn)來并且同時(shí)做一些環(huán)境初始化工作,在C++里,我們可以專門為測試寫一些運(yùn)行庫,在實(shí)際運(yùn)行編譯和測試編譯時(shí),鏈接不同的庫。這在自動(dòng)化測試技術(shù)中有個(gè)專門的名稱叫做 Mock Object。關(guān)于這個(gè),我就不再深入了。


新聞名稱:單元測試框架進(jìn)行自動(dòng)化測試
網(wǎng)站地址:http://www.5511xx.com/article/djigphj.html