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

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


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

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