【Android 单元测试】
概述
主要是基于JUnit4测试框架
JUnit简单介绍
注解的使用:
- @Before 被这个注解的方法会阻塞 @Test 注解方法,在 @Test 注解方法前执行,如果存在多@Before 方法,执行顺序随机。这个注解的方法主要用来执行一些测试的设置。
- @After 被这个注解标志的方法,会在所有的 @Test 方法之后执行,主要用来释放资源的操作
- @Test 被这个注解标志的方法,就是你的测试方法,一个单元测试类可以有多个测试方法。
- @Test(timeout=) 带参数的 @Test 注解标签,如果方法在参数时间内没有成功完成,则返回失败。
- @BeforeClass 被这个标签标注的方法,会在Class第一次加载调用,所以你可以在里面执行一个 static 方法,比如一些 static 方法是很费资源的,例如 JDBC 操作。
- @AfterClass 对应着 @BeforeClass ,你可以进行一些 static 操作之后的资源释放。
配置
- 在app下的build.gradle中导入需要用到的编译库
dependencies {
testCompile ‘junit:junit:4.12’
testCompile ‘org.mockito:mockito-all:2.0.2-beta’
}
开始编码
JUnit
在/src/test/java目录下创建测试类,或者可以在需要测试的类里,使用快捷键Ctrl+Shift+t方式来创建测试类。
- 示例1
对邮箱输入进行测试
@Test
public void isEmailValid() throws Exception {
Assert.assertTrue(mActivity.isEmailValid("123"));
Assert.assertTrue(mActivity.isEmailValid("123@qq.com"));
}
- 示例2
对密码输入进行测试
@Test
public void isPasswordValid() throws Exception {
Assert.assertTrue(mActivity.isPasswordValid("123"));
Assert.assertTrue(mActivity.isPasswordValid("asd123..."));
}
Mockito框架
Mockito库能够Mock对象、验证结果以及打桩(stubbing)。Mockito API中文文档
mock()和spy()用法的注意
- 示例1
@Test
public void mockTest() throws Exception {
List list = Mockito.spy(new LinkedList());
when(list.size()).thenReturn(100);
list.add("test1");
list.add("test2");
list.add("test3");
when(list.get(anyInt())).thenAnswer(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) throws Throwable {
return String.valueOf(new Random().nextInt(100));
}
});
when(list.get(0)).thenReturn("0");
System.out.println(list.get(0) + "---" + list.get(1) + "---" + list.get(2));
Mockito.verify(list).get(0);
}
个人总结
哈哈哈哈哈哈哈哈