您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 > junit
Android單元測試之JUnit
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2016/12/13 11:30:46 ] 推薦標(biāo)簽:單元測試 Junit Android

  在《初入Android單元測試》中我們對Android單元測試有了一個(gè)大概的了解,我們直接進(jìn)入項(xiàng)目測試環(huán)節(jié)。直接用代碼來學(xué)習(xí)單元測試。
  我們寫單元測試,一般都會用到一個(gè)或多個(gè)單元測試框架,在這里,我們介紹一下JUnit4這個(gè)測試框架。這是Java界用的廣泛,也是基礎(chǔ)的一個(gè)框架,其他的很多框架,包括我們后面會看到的Robolectric,都是基于或兼容JUnit4的。
  在Android工程中引入JUnit
  在Android項(xiàng)目里面使用JUnit是很簡單的,你只需要將JUnit這個(gè)library加到你的dependencies里面。
  testCompile 'junit:junit:4.12'
  當(dāng)然,如果你是通過Android Studio來創(chuàng)建的項(xiàng)目,那么這個(gè)dependency默認(rèn)是加上了的,所以你甚至這步都可以省略。
  JUnit基本的使用
  當(dāng)我們通過Android Studio創(chuàng)建好項(xiàng)目之后,我們在src/androidTest/java下,會看到自動生成了的單元測試代碼


  雖然代碼很少,但是在看代碼之前,我們也先來學(xué)習(xí)一下JUnit中的一些知識點(diǎn)。
  @Test : 通過給某個(gè)方法添加這個(gè)注解,JUnit會把它當(dāng)作是一個(gè)需要測試的方法。
  assertEquals(expected, actual):驗(yàn)證expected的值跟actual是一樣的,如果是一樣的話,測試通過,不然的話,測試失敗。
  可以看到自動生成的代碼中有一個(gè)useAppContext()的方法,該方法上面也標(biāo)注了@Test注解,所以該方法是一個(gè)可以測試的方法,里面只有兩行代碼,它的作用是判斷當(dāng)前測試的app包名是否等于"com.whyalwaysmea.junit"(當(dāng)然,你的代碼此處應(yīng)該是你自己的包名)
  點(diǎn)擊左側(cè)的運(yùn)行按鈕,可以直接對該方法進(jìn)行測試運(yùn)行了。如果包名和字符串相等,那么測試方法會運(yùn)行成功,如果包名和字符串不相等,那么測試方法會報(bào)錯(cuò),具體的可以看所打印出來的log
  JUnit的更多方法
  更多的注解:
  @Before: 如果一個(gè)方法被@Before修飾過了,那么在每個(gè)測試方法調(diào)用之前,這個(gè)方法都會得到調(diào)用。
  @After: 每個(gè)測試方法運(yùn)行結(jié)束之后,會運(yùn)行的方法。比如一個(gè)測試文件操作的類,那么在它的測試類中,可能@Before里面需要去打開一個(gè)文件,而每個(gè)測試方法運(yùn)行結(jié)束之后,都需要去close這個(gè)文件。這個(gè)時(shí)候可以把文件close的操作放在@After里面,讓它自動去執(zhí)行。
  類似的,還有@BeforeClass和@AfterClass。@BeforeClass的作用是,在跑一個(gè)測試類的所有測試方法之前,會執(zhí)行一次被@BeforeClass修飾的方法,執(zhí)行完所有測試方法之后,會執(zhí)行一遍被@AfterClass修飾的方法。
  @Ignore: 很多時(shí)候,因?yàn)槟承┰颍ū热缯酱a還沒有實(shí)現(xiàn)等),我們可能想讓JUnit忽略某些方法,讓它在跑所有測試方法的時(shí)候不要跑這個(gè)測試方法。要達(dá)到這個(gè)目的也很簡單,只需要在要被忽略的測試方法前面加上@Ignore可以了
  更多驗(yàn)證:
  assertEquals(expected, actual, tolerance)
  這里傳入的expected和actual是float或double類型的,大家知道計(jì)算機(jī)表示浮點(diǎn)型數(shù)據(jù)都有一定的偏差,所以哪怕理論上他們是相等的,但是用計(jì)算機(jī)表示出來則可能不是,所以這里運(yùn)行傳入一個(gè)偏差值。如果兩個(gè)數(shù)的差異在這個(gè)偏差值之內(nèi),則測試通過,否者測試失敗。
  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è)對象,即指向同一個(gè)對象
  assertNotSame(expected, actual)
  驗(yàn)證expected和actual不是同一個(gè)對象,即指向不同的對象
  注意:上面的每一個(gè)方法,都有一個(gè)重載的方法,可以在前面加一個(gè)String類型的參數(shù),表示如果驗(yàn)證失敗的話,將用這個(gè)字符串作為失敗的結(jié)果報(bào)告。
  比如:
  assertEquals("Current user Id should be 1", 1, currentUser.id());
  當(dāng)currentUser.id()的值不是1的時(shí)候,在結(jié)果報(bào)道里面將顯示"Current user Id should be 1",這樣可以讓測試結(jié)果更具有可讀性,更清楚錯(cuò)誤的原因是什么。
  總結(jié)
  該篇主要介紹了JUnit的一些基本使用,當(dāng)然他的功能不僅于此,畢竟他是java項(xiàng)目中使用廣泛的單元測試框架。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd