基本用法實際操作
CSDN同步發布
1、新建測試類
public class Caculation {
public double sum(double numA, double numB) {
return numA + numB;
}
public double multiply(double numA, double numB) {
return numA * numB;
}
}
2、類名右鍵--Go To--Test,生成測試類
項目中androidTest文件夾里的就是UI測試代碼,而test文件夾是Junit部分的單元測試代碼。
3、編輯測試類,右鍵類名或者方法可運行得出測試結果
public class CaculationTest {
private Caculation mCaculation;
@Before
public void setUp() throws Exception {
mCaculation = new Caculation();
}
@Test
public void sum() throws Exception {
assertEquals(2,mCaculation.sum(1,1),0);
}
@Test
public void multiply() throws Exception {
assertEquals(10,mCaculation.multiply(2,5),0);
}
}
Junit斷言及注解說明
斷言
- assertArrayEquals(expecteds, actuals) 查看兩個數組是否相等。
- assertEquals(expected, actual) 查看兩個對象是否相等。類似于字符串比較使用的equals()方法
- assertNotEquals(first, second) 查看兩個對象是否不相等。
- assertNull(object) 查看對象是否為空。
- assertNotNull(object) 查看對象是否不為空。
- assertSame(expected, actual) 查看兩個對象的引用是否相等。類似于使用“==”比較兩個對象
- assertNotSame(unexpected, actual) 查看兩個對象的引用是否不相等。類似于使用“!=”比較兩個對象
- assertTrue(condition) 查看運行結果是否為true。
- assertFalse(condition) 查看運行結果是否為false。
- assertThat(actual, matcher) 查看實際值是否滿足指定的條件
- fail() 讓測試失敗
注意:上面的方法,都有一個重載的方法,可以在前面加一個String類型的參數,表示如果驗證失敗的話,將用這個字符串作為失敗的結果報告。
比如:
assertEquals("Current user Id should be 1", 1, currentUser.id());
注解
- @Before 初始化方法
- @After 釋放資源
- @Test 測試方法,在這里可以測試期望異常和超時時間
- @Ignore 忽略的測試方法
- @BeforeClass 針對所有測試,只執行一次,且必須為static void
- @AfterClass 針對所有測試,只執行一次,且必須為static void
- @RunWith 指定測試類使用某個運行器
- @Parameters 指定測試類的測試數據集合
- @Rule 允許靈活添加或重新定義測試類中的每個測試方法的行為
- @FixMethodOrder 指定測試方法的執行順序
一個測試類單元測試的執行順序為:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一個測試方法的調用順序為:
@Before –> @Test –> @After
打包測試
同樣,如果一個項目中有很多個測試用例,如果一個個測試也很麻煩,因此打包測試就是一次性測試完成包中含有的所有測試用例。
@RunWith(Suite.class)
@Suite.SuiteClasses({ AssertTests.class, CaculationTest.class, DemoTest.class })
public class AllCaseTest {
}
需要向@RunWith注解傳遞一個參數Suite.class 。同時,我們還需要另外一個注解@Suite.SuiteClasses,來表明這個類是一個打包測試類。并將需要打包的類作為參數傳遞給該注解就可以了。至于AllCaseTest隨便起一個類名,內容為空既可。運行AllCaseTest類即可完成打包測試
限時測試
在@Test后加入timeout參數
@Test(timeout=1000)
public void multiply() throws Exception {
assertEquals(10,mCaculation.multiply(2,5),0);
}
直接用@Rule設置該類的timeout參數
@Rule
public Timeout globalTimeout = new Timeout(10000); // 10 seconds max per method tested
驗證方法會拋出某些異常
public class Calculator {
// Omit testAdd() and testMultiply() for brevity
public double divide(double divident, double dividor) {
if (dividor == 0) throw new IllegalArgumentException("Dividor cannot be 0");
return divident / dividor;
}}
public class CalculatorTest {
Calculator mCalculator;
@Before
public void setup() {
mCalculator = new Calculator();
}
// Omit testAdd() and testMultiply() for brevity
@Test(expected = IllegalArgumentException.class)
public void test() {
mCalculator.divide(4, 0);
}
}
@Test(expected = IllegalArgumentException.class)表示驗證這個測試方法將拋出IllegalArgumentException異常,如果沒有拋出的話,則測試失敗。