[TOC]
Robolectric 介绍
依赖管理
package.gradle
内容梗概
test_depends = [
junit : 'junit:junit:4.6',
mockito_core : 'org.mockito:mockito-core:2.7.22',
robolectric : 'org.robolectric:robolectric:3.6.1',
robolectric_shadows_multidex : 'org.robolectric:shadows-multidex:3.6.1',
robolectric_shadows_support_v4: 'org.robolectric:shadows-support-v4:3.3.2',
easymock : 'org.easymock:easymock:3.4',
powermock_core : 'org.powermock:powermock-core:1.6.5',
powermock_module_junit4 : 'org.powermock:powermock-module-junit4:1.6.5',
powermock_api_easymock : 'org.powermock:powermock-api-easymock:1.6.5',
okhttp3_logging_interceptor : 'com.squareup.okhttp3:logging-interceptor:3.8.0@jar',
]
详细 package.gradle 文件见 https://github.com/ShubNig/AubNig-Nexus-Gradle-3p/blob/master/package.gradle
引入
package.gradle
见 https://github.com/ShubNig/AubNig-Nexus-Gradle-3p#depends
使用package.gradle
见 https://github.com/ShubNig/AubNig-Nexus-Gradle-3p/blob/master/plugintemp/build.gradle#L31
配置基础测试类
@RunWith(RobolectricTestRunner.class)
@Config(
constants = BuildConfig.class,
packageName = BuildConfig.APPLICATION_ID,
application = TestApplication.class,
sdk = Build.VERSION_CODES.M
)
public abstract class RobolectricTemp extends TestTemp {
}
注意,其中
- constants 使用当前app,或者module 编译的
BuildConfig.class
,不然出错 - application 指定的
TestApplication.class
可以替换掉,这个类可以做必须在 application 中,初始化的事情
�第一次运行,会去下载对应的测试帮助包,时间较长,慢慢等待
测试样例
Toast 测试
toast 的场景测试是单元测试中常见,也比较难覆盖的部分,主要问题是单元测试时
- context 不好模拟
- 验证 toast 内容困难
- resource 不好获取
解决方法为 RobolectricTemp.java
中
@Mock
protected Context application = RuntimeEnvironment.application;
Mock 了一个 RuntimeEnvironment 的 application 可以用于测试
public class TestToast extends RobolectricTemp {
@Test
public void test_01_show_toast_success() throws Exception {
// mock
String message = RandomString.generateLowerString(8);
// do show
Toast.makeText(application, message, Toast.LENGTH_SHORT).show();
// verify
assertTrue("test_01_show_toast_success", ShadowToast.getTextOfLatestToast().contains(message));
}
}
TestToast.java
源码见 https://github.com/ShubNig/AubNig-Nexus-Gradle-3p/blob/master/test/src/test/java/com/sinlov/aubnig/test/demo/widget/TestToast.java
- mock 过程中
message
是随机生成的,application
是 RuntimeEnvironment mock - 验证 toast 使用
ShadowToast.getTextOfLatestToast()
这个来源于test_depends.robolectric_shadows_support_v4
- resource 资源,需要配置一下
模块下的 build.gradle
android {
...
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
配置参考 https://github.com/ShubNig/AubNig-Nexus-Gradle-3p/blob/master/test/build.gradle