1 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
為什么要編寫(xiě)單元測(cè)試?原因是單元測(cè)試有不少的優(yōu)點(diǎn),能夠給我們的工作帶來(lái)很大的幫助。單元測(cè)試的優(yōu)點(diǎn)1.幫助開(kāi)發(fā)人員編寫(xiě)代碼,提升質(zhì)量、減少bug。如果大家分析一下我們bug原因的構(gòu)成,我想有會(huì)有一部分bug的原因是開(kāi)發(fā)人員在編寫(xiě)工作代碼的時(shí)候沒(méi)有考慮到某些case或者邊際條件。造成這種問(wèn)題的原因很多,其中很重要的一個(gè)原因是我們對(duì)工作代碼所要完成的功能思考不足,而編寫(xiě)單元測(cè)試,特別是先寫(xiě)單元測(cè)試再寫(xiě)工作代碼就可以幫助開(kāi)發(fā)人員思考編寫(xiě)的代碼到底要實(shí)現(xiàn)哪些功能。例如實(shí)現(xiàn)一個(gè)簡(jiǎn)單的用戶注冊(cè)功能的業(yè)務(wù)類方法,用單元測(cè)試再寫(xiě)工作代碼的方式來(lái)工作的話開(kāi)發(fā)人員就會(huì)先考慮各種場(chǎng)景相關(guān),例如正常注冊(cè)、用戶名重復(fù)、沒(méi)有滿足必要的填寫(xiě)內(nèi)容......等等,之后就會(huì)編寫(xiě)相關(guān)的測(cè)試用例public Class UserSerivceTest(){
public userRegister_Ok(){
......}public userRegister_nameDuplicated(){
......}}編寫(xiě)單元測(cè)試代碼的過(guò)程就是促使開(kāi)發(fā)人員思考工作代碼實(shí)現(xiàn)內(nèi)容和邏輯的過(guò)程,之后實(shí)現(xiàn)工作代碼的時(shí)候,開(kāi)發(fā)人員思路會(huì)更清晰,實(shí)現(xiàn)代碼的質(zhì)量也會(huì)有相應(yīng)的提升。2.提升反饋速度,減少重復(fù)工作,提高開(kāi)發(fā)效率。開(kāi)發(fā)人員實(shí)現(xiàn)某個(gè)功能或者修補(bǔ)了某個(gè)bug,如果有相應(yīng)的單元測(cè)試支持的話,開(kāi)發(fā)人員可以馬上通過(guò)運(yùn)行單元測(cè)試來(lái)驗(yàn)證之前完成的代碼是否正確,而不需要反復(fù)通過(guò)發(fā)布war包、啟動(dòng)jboss、通過(guò)瀏覽器輸入數(shù)據(jù)等繁瑣的步驟來(lái)驗(yàn)證所完成的功能。用單元測(cè)試代碼來(lái)驗(yàn)證代碼和通過(guò)發(fā)布應(yīng)用以人工的方式來(lái)驗(yàn)證代碼這兩者的效率差很多,看到很多開(kāi)發(fā)人員每天要反復(fù)執(zhí)行N次發(fā)布腳本(antx之類的工具)真是痛苦。3.保證你最后的代碼修改不會(huì)破壞之前代碼的功能。項(xiàng)目越做越大,代碼越來(lái)越多,特別涉及到一些公用接口之類的代碼或是底層的基礎(chǔ)庫(kù),誰(shuí)也不敢保證這次修改的代碼不會(huì)破壞之前的功能,所以與此相關(guān)的需求會(huì)被擱置或推遲,由于不敢改進(jìn)代碼,代碼也變得越來(lái)越難以維護(hù),質(zhì)量也越來(lái)越差。而單元測(cè)試就是解決這種問(wèn)題的很好方法(不敢說(shuō)最好的)。由于代碼的歷史功能都有相應(yīng)的單元測(cè)試保證,修改了某些代碼以后,通過(guò)運(yùn)行相關(guān)的單元測(cè)試就可以驗(yàn)證出新調(diào)整的功能是否有影響到之前的功能。當(dāng)然要實(shí)現(xiàn)到這種程度需要很大的付出,不但要能夠達(dá)到比較高的測(cè)試覆蓋率,而且單元測(cè)試代碼的編寫(xiě)質(zhì)量也要有保證。4.讓代碼維護(hù)更容易。由于給代碼寫(xiě)很多單元測(cè)試,相當(dāng)于給代碼加上了規(guī)格說(shuō)明書(shū),開(kāi)發(fā)人員通過(guò)讀單元測(cè)試代碼也能夠幫助開(kāi)發(fā)人員理解現(xiàn)有代碼。很有opensource的項(xiàng)目都有相當(dāng)量的單元測(cè)試代碼,通過(guò)讀這些測(cè)試代碼會(huì)有助于理解生產(chǎn)源代碼。5.有助于改進(jìn)代碼質(zhì)量和設(shè)計(jì)。除了那些大拿們編寫(xiě)的代碼,我相信很多易于維護(hù)、設(shè)計(jì)良好的代碼都是通過(guò)不斷的重構(gòu)才得到的。雖然說(shuō)單元測(cè)試本身不能直接改進(jìn)生產(chǎn)代碼的質(zhì)量,但它為生產(chǎn)代碼提供了“安全網(wǎng)”,讓開(kāi)發(fā)人員可以勇敢地改進(jìn)代碼,從而讓代碼的clean和beautiful不再是夢(mèng)想。單元測(cè)試的缺點(diǎn)1.單元測(cè)試的學(xué)習(xí)成本比較高。編寫(xiě)單元測(cè)試涉及的技術(shù)很多,如果只是單純的使用Junit或是TestNG這樣的基礎(chǔ)單元測(cè)試框架往往很難應(yīng)對(duì)各種復(fù)雜的單元測(cè)試情況,所以勢(shì)必要借助很多第三方的框架和技術(shù)(easymock,jmock,dbunit等等),這些框架和技術(shù)的學(xué)習(xí)還是會(huì)增加學(xué)習(xí)的成本和難度。2.編寫(xiě)單元測(cè)試會(huì)增加程序員工作量。單元測(cè)試跟生產(chǎn)代碼是一樣的,并不會(huì)應(yīng)為是用來(lái)測(cè)試的就有所不同,開(kāi)發(fā)人員同樣要面對(duì)測(cè)試代碼的編寫(xiě)、維護(hù)等工作,也同樣要面對(duì)避免重復(fù)代碼等一系列問(wèn)題,能否寫(xiě)出好的測(cè)試代碼還是取決于開(kāi)發(fā)人員的設(shè)計(jì)和編碼能力。3.推廣和運(yùn)用單元測(cè)試需要比較大的投入。只有在每個(gè)開(kāi)發(fā)人員都編寫(xiě)了足夠的、質(zhì)量好的單元測(cè)試代碼,大家才能真正享受到單元測(cè)試帶給我們的好處。在達(dá)到這種層度以前,還需要不少實(shí)現(xiàn)和資源的投入??偨Y(jié)雖然單元測(cè)試也有一些缺點(diǎn)和負(fù)面的效應(yīng),但跟單元測(cè)試的優(yōu)點(diǎn)比較起來(lái),為了克服和解決這些缺點(diǎn)所在的付出是值得的。
- 1 回答
- 0 關(guān)注
- 655 瀏覽
添加回答
舉報(bào)