测试重要性
提高代码质量,对代码负责,提升代码,写作的能力
1.依赖
dependencies {
// Required -- JUnit 4 framework 飞机上的著作
testImplementation 'junit:junit:4.12'
// Optional -- Mockito framework用于模拟一些依赖对象,以达到隔离依赖的效果)
testImplementation 'org.mockito:mockito-core:2.19.0'
}
2. 测试方式
- 本地测试 jvm 测试
@Test
public void isValidEmail() {
assertThat(EmailValidator.isValidEmail("#name@email.com"), is(true));
}
2 .真机测试
3 .本地Android框架 测试
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class MockUnitTest {
private static final String FAKE_STRING = "AndroidUnitTest";
@Mock
Context mMockContext;
@Test
public void readStringFromContext_LocalizedString() {
//模拟方法调用的返回值,隔离对Android系统的依赖
when(mMockContext.getString(R.string.app_name)).thenReturn(FAKE_STRING);
assertThat(mMockContext.getString(R.string.app_name), is(FAKE_STRING));
when(mMockContext.getPackageName()).thenReturn("com.jdqm.androidunittest");
System.out.println(mMockContext.getPackageName());
}
}
3. 注解
Annotation
描述
@Test public void method()
定义所在方法为单元测试方法
@Test (expected = Exception.class) public void method()
测试方法若没有抛出Annotation中的Exception类型(子类也可以)->失败
@Test(timeout=100) public void method()
性能测试,如果方法耗时超过100毫秒->失败
@Before public void method()
这个方法在每个测试之前执行,用于准备测试环境(如: 初始化类,读输入流等),在一个测试类中,每个@Test方法的执行都会触发一次调用。
@After public void method()
这个方法在每个测试之后执行,用于清理测试环境数据,在一个测试类中,每个@Test方法的执行都会触发一次调用。
@BeforeClass public static void method()
这个方法在所有测试开始之前执行一次,用于做一些耗时的初始化工作(如: 连接数据库),方法必须是static
@AfterClass public static void method()
这个方法在所有测试结束之后执行一次,用于清理数据(如: 断开数据连接),方法必须是static
@Ignore或者@Ignore("太耗时") public void method()
忽略当前测试方法,一般用于测试方法还没有准备好,或者太耗时之类的
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestClass{}
使得该测试类中的所有测试方法都按照方法名的字母顺序执行,可以指定3个值,分别是DEFAULT、JVM、NAME_ASCENDIN