很多小伙伴的的固有理解是——我學(xué)的是編程開發(fā),不是軟件測試,我只需要做好開發(fā)就可以了,代碼測試并不由我負(fù)責(zé)。實(shí)際上,作為開發(fā)者,他們要做的并不僅僅是開發(fā),還要做一部分的測試。這部分測試是基于代碼單元進(jìn)行測試的,所以又叫單元測試。接下來這篇文章,小編就將以單元測試是什么,單元測試的目的和意義,以及常見的單元測試工具與小伙伴們進(jìn)行討論。
什么是單元測試
首先,要確定什么是單元。在軟件開發(fā)項(xiàng)目中,一般把最簡單的功能模塊稱為單元(另一種說法是最小的可測代碼模塊),簡單的理解,比如C語言中的函數(shù),java中的方法,都是單元。單元測試,就是測試這些單元是否滿足需求。
單元測試的目的和意義
單元測試的目的很簡單,他的動(dòng)機(jī)主要就兩點(diǎn):保護(hù)或驗(yàn)證實(shí)現(xiàn)功能;保護(hù)已經(jīng)實(shí)現(xiàn)的功能不被破壞。簡單的來說就是保證單元的功能正常。
雖然單元測試的目的很簡單,意義卻相當(dāng)重要。單元測試作為所有測試中最早的測試(用例和需求審查在程序開發(fā)之前,不計(jì)入討論),單元測試的質(zhì)量直接影響后面測試的質(zhì)量和工作量。另外,單元測試作為最早介入開發(fā)的測試,他對bug的預(yù)防具有重要意義。
誰來負(fù)責(zé)單元測試
單元測試應(yīng)該由開發(fā)來負(fù)責(zé),但由于國內(nèi)存在重開發(fā)輕測試的情況(開發(fā)工作量更高)。也可以采用測試協(xié)助開發(fā)做單元測試。
測試工具的引入
單元測試只不過是一個(gè)測試名稱,而不是具體的測試方法,很多開發(fā)不一定會(huì)使用正規(guī)的測試工具。但實(shí)際上,測試工具的引入對單元測試的效率提升有著很大的幫助。
沒有引入測試工具前,一般單元測試使用main方法來運(yùn)行代碼,這種最原始的方法有著最低的效率。比如新開發(fā)了一個(gè)方法,要對他進(jìn)行測試,需要設(shè)計(jì)好幾個(gè)測試用例,這些測試用例的代碼量隨著測試用例的增多,將遠(yuǎn)超功能代碼;另外,每次測試,都要采用肉眼觀察的方式來判斷測試是否通過,測試效率低下。
引入測試工具后,以上的問題都解決了:使用測試工具,它將自動(dòng)化調(diào)用功能代碼,最終要寫的測試代碼量將控制到一個(gè)比較小的水平;測試工具一般都有斷言驗(yàn)證功能,使用這個(gè)功能可以自動(dòng)判斷測試是否通過(只要提前設(shè)置條件),為批量自動(dòng)化測試和生成測試報(bào)告提供了很大幫助。
常見單元測試工具(框架)
這方面最出名的應(yīng)該是xUnit家族了。java最出名的單元測試框架為JUnit,.Net也有對應(yīng)的NUnit,C/C++可以使用CPPUnit,PHP也有對應(yīng)的PHPUnit,當(dāng)下最火的python對應(yīng)的是unittest(原名PyUnit,現(xiàn)已被納入標(biāo)準(zhǔn)python的一個(gè)模塊)。
小結(jié)
接下來要提到的極限編程,他的核心思想之一就是測試驅(qū)動(dòng)開發(fā),實(shí)現(xiàn)方式大概就是:先確定需求,然后根據(jù)需求寫測試用例和對應(yīng)的測試代碼,最后寫功能模塊。在寫功能模塊的時(shí)候要運(yùn)行到測試代碼完全通過
單元測試作為測試?yán)锩娴淖罨A(chǔ)的測試,它的重要性不言而喻。而掌握對應(yīng)的語言的單元測試工具的使用也作為學(xué)習(xí)該語言必不可少的一項(xiàng)技能。在一些比較極端的開發(fā)團(tuán)隊(duì)中甚至對單元測試看得相當(dāng)重要(以極限編程思想作為指導(dǎo)的敏捷開發(fā)團(tuán)隊(duì))。所以掌握單元測試工具是每個(gè)合格程序員的必修課,各位小伙伴趕緊學(xué)起來吧!
點(diǎn)擊junit教程前往Junit教程學(xué)習(xí)!