JUnit 的常用語法使用

1.注解

  • @Test
    說明該方法是測(cè)試方法。測(cè)試方法必須是public void,可以拋出異常召夹。
  • @Before、@After
    @Before它會(huì)在每個(gè)測(cè)試方法執(zhí)行前都調(diào)用一次恕沫。
    @After與@Before對(duì)應(yīng)监憎,它會(huì)在每個(gè)測(cè)試方法執(zhí)行完后都調(diào)用一次。
  • @BeforeClass婶溯、@AfterClass
    @BeforeClass它會(huì)在所有的測(cè)試方法執(zhí)行之前調(diào)用一次鲸阔。與@Before的差別是:@Before注解的方法在每個(gè)方法執(zhí)行前都會(huì)調(diào)用一次偷霉,有多少個(gè)測(cè)試方法就會(huì)掉用多少次;而@BeforeClass注解的方法只會(huì)執(zhí)行一次褐筛,在所有的測(cè)試方法執(zhí)行前調(diào)用一次
    @AfterClass與@BeforeClass對(duì)應(yīng)类少,它會(huì)在所有的測(cè)試方法執(zhí)行完成后調(diào)用一次。
    注意的是渔扎,被這兩個(gè)annotation修飾的方法必須是靜態(tài)的硫狞。
    這兩個(gè)方法可以用來setup和release一些公共的資源
  • @Ignore
    忽略該測(cè)試方法,很多時(shí)候晃痴,因?yàn)槟承┰颍ū热缯酱a還沒有實(shí)現(xiàn)等)残吩,我們可能想讓JUnit忽略某些方法,讓它在跑所有測(cè)試方法的時(shí)候不要跑這個(gè)測(cè)試方法倘核,可以加上該注解世剖。
    以上這些注解都是針對(duì)測(cè)試方法而言的,我們寫個(gè)測(cè)試類來運(yùn)行一下笤虫,看看具體的執(zhí)行順序旁瘫,代碼如下:
public class Test {

    @BeforeClass
    public static void init() {
        System.out.println("------init()------");
    }
    @AfterClass
    public static void finish() {
        System.out.println("------finish()------");
    }
    @Before
    public void setUp() {
        System.out.println("------setUp()------");
    }
    @After
    public void tearDown() {
        System.out.println("------tearDown()------");
    }
    @Test
    public void test1() {
        System.out.println("------test1()------");
    }
    @Test
    public void test2() {
        System.out.println("------test2()------");
    }
}
------init()------
------setUp()------
------test1()------
------tearDown()------
------setUp()------
------test2()------
------tearDown()------
------finish()------

2.常用斷言

  • assertEquals(expected, actual)
    驗(yàn)證expected的值跟actual是一樣的,如果是一樣的話琼蚯,測(cè)試通過酬凳,不然的話,測(cè)試失敗遭庶。如果傳入的是object宁仔,那么這里的對(duì)比用的是equals()
  • assertNotEquals(unexpected, actual)
    驗(yàn)證期望值與實(shí)際值不相等。
  • assertTrue(boolean condition)
    驗(yàn)證contidion的值是true
  • assertFalse(boolean condition)
    驗(yàn)證contidion的值是false
  • assertNull(Object obj)
    驗(yàn)證obj的值是null
  • assertNotNull(Object obj)
    驗(yàn)證obj的值不是null
  • assertSame(expected, actual)
    驗(yàn)證expected和actual是同一個(gè)對(duì)象峦睡,即指向同一個(gè)對(duì)象
  • assertNotSame(expected, actual)
    驗(yàn)證expected和actual不是同一個(gè)對(duì)象翎苫,即指向不同的對(duì)象
  • Assert.fail()
    讓測(cè)試方法失敗

3.Hamcrest與assertThat(使驗(yàn)證條件更加豐富,充分考慮測(cè)試過程中數(shù)據(jù)的變化)

字符串相關(guān)匹配符

startsWith
endsWith
containsString
equalToIgnoringCase
equalToIgnoringWhiteSpace

數(shù)值相關(guān)匹配符

closeTo
greaterThan
lessThan
lessThanOrEqualTo
greaterThanOrEqualTo

集合相關(guān)匹配符

hasEntry
hasKey
hasValue
hasItem
hasItems
hasItemInArray

對(duì)象相關(guān)匹配符

notNullValue
nullValue
sameInstance
instanceOf
hasProperty

組合等邏輯匹配符

allOf
anyOf
both
either
is
isA
not
any
anything
代碼演示示列:

//文本
assertThat("android studio", startsWith("and"));
assertThat("android studio", endsWith("dio"));
assertThat("android studio", containsString("android"));
assertThat("android studio", equalToIgnoringCase("ANDROID studio"));
assertThat("android studio ", equalToIgnoringWhiteSpace(" android studio "));

//數(shù)字
//測(cè)試數(shù)字在某個(gè)范圍之類榨了,10.6在[10.5-0.2, 10.5+0.2]范圍之內(nèi)
assertThat(10.6, closeTo(10.5, 0.2));
//測(cè)試數(shù)字大于某個(gè)值
assertThat(10.6, greaterThan(10.5));
//測(cè)試數(shù)字小于某個(gè)值
assertThat(10.6, lessThan(11.0));
//測(cè)試數(shù)字小于等于某個(gè)值
assertThat(10.6, lessThanOrEqualTo(10.6));
//測(cè)試數(shù)字大于等于某個(gè)值
assertThat(10.6, greaterThanOrEqualTo(10.6));

//集合類測(cè)試
Map<String, String> map = new HashMap<String, String>();
map.put("a", "hello");
map.put("b", "world");
map.put("c", "haha");
//測(cè)試map包含某個(gè)entry
assertThat(map, hasEntry("a", "hello"));
//測(cè)試map是否包含某個(gè)key
assertThat(map, hasKey("a"));
//測(cè)試map是否包含某個(gè)value
assertThat(map, hasValue("hello"));
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
//測(cè)試list是否包含某個(gè)item
assertThat(list, hasItem("a"));
assertThat(list, hasItems("a", "b"));
//測(cè)試數(shù)組是否包含某個(gè)item
String[] array = new String[]{"a", "b", "c", "d"};
assertThat(array, hasItemInArray("a"));

//測(cè)試對(duì)象
//測(cè)試對(duì)象不為null
assertThat(new Object(), notNullValue());
Object obj = null;
//測(cè)試對(duì)象為null
assertThat(obj, nullValue());
String str = null;
assertThat(str, nullValue(String.class));
obj = new Object();
Object obj2 = obj;
//測(cè)試2個(gè)引用是否指向的通一個(gè)對(duì)象
assertThat(obj, sameInstance(obj2));
str = "abc";
assertThat(str, instanceOf(String.class));

//測(cè)試JavaBean對(duì)象是否有某個(gè)屬性
assertThat(new UserInfo(), hasProperty("name"));
assertThat(new UserInfo(), hasProperty("age"));

//-------組合邏輯測(cè)試--------
//兩者都滿足煎谍,a && b
assertThat(10.4, both(greaterThan(10.0)).and(lessThan(10.5)));
//所有的條件都滿足,a && b && c...
assertThat(10.4, allOf(greaterThan(10.0), lessThan(10.5)));
//任一條件滿足龙屉,a || b || c...
assertThat(10.4, anyOf(greaterThan(10.3), lessThan(10.4)));
//兩者滿足一個(gè)即可呐粘,a || b
assertThat(10.4, either(greaterThan(10.0)).or(lessThan(10.2)));
assertThat(10.4, is(10.4));
assertThat(10.4, is(equalTo(10.4)));
assertThat(10.4, is(greaterThan(10.3)));
str = new String("abc");
assertThat(str, is(instanceOf(String.class)));
assertThat(str, isA(String.class));
assertThat(10.4, not(10.5));
assertThat(str, not("abcd"));

assertThat(str, any(String.class));
assertThat(str, anything());

文章借鑒與:
http://www.reibang.com/p/06124ddc6c68
http://chriszou.com/2016/04/18/android-unit-testing-junit.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市转捕,隨后出現(xiàn)的幾起案子作岖,更是在濱河造成了極大的恐慌,老刑警劉巖五芝,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痘儡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡枢步,警方通過查閱死者的電腦和手機(jī)沉删,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蓄坏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丑念,你說我怎么就攤上這事涡戳。” “怎么了脯倚?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵渔彰,是天一觀的道長。 經(jīng)常有香客問我推正,道長恍涂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任植榕,我火速辦了婚禮再沧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尊残。我一直安慰自己炒瘸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布寝衫。 她就那樣靜靜地躺著顷扩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慰毅。 梳的紋絲不亂的頭發(fā)上隘截,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音汹胃,去河邊找鬼婶芭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛着饥,可吹牛的內(nèi)容都是我干的犀农。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贱勃,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼井赌!你這毒婦竟也來了谤逼?” 一聲冷哼從身側(cè)響起贵扰,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎流部,沒想到半個(gè)月后戚绕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枝冀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年舞丛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耘子。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡球切,死狀恐怖谷誓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吨凑,我是刑警寧澤捍歪,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布围详,位于F島的核電站楣富,受9級(jí)特大地震影響渗勘,放射性物質(zhì)發(fā)生泄漏儡首。R本人自食惡果不足惜吃挑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一磷斧、第九天 我趴在偏房一處隱蔽的房頂上張望粗合。 院中可真熱鬧吗氏,春花似錦怠堪、人聲如沸揽乱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锤窑。三九已至,卻和暖如春嚷炉,著一層夾襖步出監(jiān)牢的瞬間渊啰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工申屹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绘证,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓哗讥,卻偏偏與公主長得像嚷那,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杆煞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 我們寫單元測(cè)試魏宽,一般都會(huì)用到一個(gè)或多個(gè)單元測(cè)試框架,在這里决乎,我們介紹一下JUnit4這個(gè)測(cè)試框架队询。這是Java界用...
    鄒小創(chuàng)閱讀 5,703評(píng)論 3 33
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)构诚,斷路器蚌斩,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 在《初入Android單元測(cè)試》中我們對(duì)Android單元測(cè)試有了一個(gè)大概的了解,今天我們就直接進(jìn)入項(xiàng)目測(cè)試環(huán)節(jié)范嘱。...
    最最最最醉人閱讀 964評(píng)論 0 8
  • 腳好酸送膳。
    赫梅爾妮閱讀 178評(píng)論 0 0
  • 今天在微信公眾號(hào)上看到了一篇文章《60個(gè)漢字叠聋,洞穿中國文化撕阎,道破人生真諦》感觸頗多。更加深刻的了解中國的博大精深的...
    云上之人閱讀 590評(píng)論 0 0