開發人員必備的技能 Junit測試

2021-08-21 01:23:59 字數 3168 閱讀 8948

對於程式設計師來說,僅僅讓程式通過編譯是不夠的,還要做到基本的測試,保證寫的**的正確性。單元測試,整合測試,黑盒測試,白盒測試,對於學過軟體工程的計算機專業的人來說這些都很熟悉,但是我相信很多人都並不會真的做測試,其中有各種各樣的理由。但是單元測試是乙個程式設計師必須掌握的技能。而且以後在重構,測試的時候你會發現junit測試真的是一件非常必要非常便利的事情。而且很能提高自己的工作效率。

雖然說android中有很多優秀的測試框架,但是由於junit的簡單性,用來作為入門學習非常合適。

廢話不多說,我們開始一起回顧一下怎麼使用junit測試。

###the first junit

第乙個測試基於eclipse,我們先寫乙個用於完成加法操作的類,**如下:

public

inte***ce adder

public

class

addimpl

implements

adder

}

接下來生成用於單元測試的類,可以直接右鍵新建乙個junit測試用例。見圖1:

圖1

圖2 如圖2,需要將junit4的libray載入進來.編寫的測試用例類是下面的:

public

class addertestcase

}

junit4使用註解在註解方法裡面可以寫測試用例,junit4比junit3更簡單,更方便,想要了解兩者的不同可以看這裡。

junit的斷言和失敗提示

assertequals斷言

這是應用非常廣泛的乙個斷言,它的作用是比較實際的值和使用者預期的值是否一樣,assertequals在junit中有很多不同的實現,以引數expected和actual都為object型別的為例,assertequals定義為:

static public void assertequals(string message, object expected, object actual)

其中,expected為使用者期望某一時刻物件的值,actual為某一時刻物件實際的值。如果這兩值相等的話(通過物件的equals方法比較),說明預期是正確的,也就是說,**執行是正確的。assertequals還提供了其它的一些實現,例如整數比較,浮點數的比較等等。

asserttrue與assertfalse斷言

asserttrue與assertfalse可以判斷某個條件是真還是假,如果和預期的值相同則測試成功,否則將失敗,asserttrue的定義如下:

staticpublic void asserttrue(string message, boolean condition)

「condition」表示要測試的狀態,如果「condition」的值為false,則測試將會失敗。

assertnull與assertnotnull斷言

assertnull與assertnotnull可以驗證所測試的物件是否為空或不為空,如果和預期的相同則測試成功,否則測試失敗,assertnull定義為:

staticpublic void assertnull(string message, objectobject)

其中,object就是要測試的對物件,如果object為空,該測試成功,否則失敗,是不是很簡單。

assertsame與assertnotsame斷言

assertsame和assertequals不同,assertsame測試預期的值和實際的值是否為同乙個引數(即判斷是否為相同的引用)。assertnotsame則測試預期的值和實際的值是不為同乙個引數。assertsame的定義為:

static publicvoid assertsame(string message, object expected, object actual)

而assertequals則判斷兩個值是否相等,通過物件的equals方法比較,可以相同引用的物件,也可以不同。

fail斷言

「fail」斷言能使測試立即失敗,這種斷言通常用於標記某個不應該被到達的分支。例如asserttrue斷言中,condition為false時就是正常情況下不應該出現的,所以測試將立即失敗,fail的定義為:

staticpublic void fail(string message)

當乙個失敗或者錯誤出現的時候,當前測試方法的執行流程將會被中止,但是位於同乙個測試類中的其他測試將會繼續執行。

執行多個測試類–testsuite

@runwith(suite.class)

@suite.suiteclasses()

public class

mathtestsuite

其中addertestcase.class是上面的單元測試類,另乙個是類似的用於測試除法的類。

需要測試哪些內容?

(1)邊界條件

邊界條件可以概括為乙個詞:correct,分別如下:

一致性(conformance):值是否和預期一致;如兩個editext分別需要輸入兩個整型資料,但是使用者輸入的不是整型確實文字怎麼處理;

有序性(ordering):值是否像期望的那樣是無序或者有序的;

區間性(range):值是否位於合理的最小值和最大值之間。eg.圓的角度為1~360度,使用者輸入500的時候怎麼處理

基數性(cardinatity):是否恰好有足夠的值。這裡的基數指的是計數,測試方法是否可以正確計數,並檢查最後的計數值;

存在性(existence):值是否存在。測試方法是否可以處理值不存在的情況,eg。物件為null的情況下得到的結果是什麼;

時間性(time):所有事情的發生是否是有序的,是否在正確的時刻、是否恰好及時。與時間相關的問題有:相對時間(時間上的順序)、絕對時間(消耗的時間和時鐘上的時間)、併發問題。eg、方法呼叫的時間順序、**超時、不同的本地時間、多執行緒同步等

(2)覆蓋執行路徑重點內容

開發人員的必備技能

對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...

開發人員的必備技能

對於剛開始學習軟體開發的新人來說,必備技能 往往意味著乙個長長的 標有重要度的學習列表,但是過長的列表通常會導致新人不知如何開始學習,壓力倍增。本文嘗試列舉出最重要的幾個技能,也期望通過此列表能給新人乙個比較明確的學習重點和路徑。沒有掌握任何一門程式語言,就不可能成為一名程式設計人員。許多程式設計師...

IT開發人員

其路五 轉行到市場 絞盡腦汁的想想,我所知道的人之中只有兩個開發人員去了市場,這兩個人都不能說是朋友,認識而已。他們都是主動要求去了市場,結果是這兩個人均在市場都是乾到一年左右,然後都自已開公司了。呵呵,很奇怪,極高的轉行成功率!不過仔細想想,我對這兩個人的思路佩服的五體投地。能下決心仍掉每月5 6...