在编写 Android 测试用例的时候,有时候我们需要涉及到屏幕分辨率相关测试用例。
比如不同分辨率得到不同的像素数值,可以参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@RunWith(RobolectricTestRunner.class) @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) @Config(sdk = Build.VERSION_CODES.P) public class DimensUnitTest { @Test @Config(qualifiers = "w480dp-h800dp") public void dimens800x480_isCorrect() { final Context context = RuntimeEnvironment.application; final double ref100DpBase = 42.666667; float expectDp = 110; double dips = context.getResources().getDimension(R.dimen.dimen_110); assertEquals(ref100DpBase * expectDp / 100, dips, delta); for (Map.Entry<Integer, Double> entry : expectDimens.entrySet()) { dips = context.getResources().getDimension(entry.getKey()); assertEquals(ref100DpBase * entry.getValue() / 100, dips, delta); } } } |
比如不同语言得到不同的字符串,可以参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@RunWith(RobolectricTestRunner.class) @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) @Config(sdk = Build.VERSION_CODES.P) public class LangUnitTest { /** * 使用qualifiers加载对应的资源文件 * * @throws Exception */ @Config(qualifiers = "zh-rCN") @Test public void testString() throws Exception { final Context context = RuntimeEnvironment.application; assertThat(context.getString(R.string.app_name), is("单元测试Demo")); } } |
其他相关的测试参数,参考 Device Configuration。
注意需要在 build.gradle 中增加资源包含信息,否则在测试的时候会找不到指定的资源文件,默认只测试代码,被测试的资源文件不打包进入应用。
参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
testOptions { unitTests { includeAndroidResources = true all { //命令行下 单元测试可能卡住的问题 jvmArgs '-noverify' //robolectric外部指定下载资源链接的参数,使用 -D 参数指定 bash gradlew clean build -Drobolectric.dependency.repo.url=http://127.0.0.1/jcenter systemProperty 'robolectric.dependency.repo.url', System.getProperty("robolectric.dependency.repo.url") systemProperty 'robolectric.dependency.repo.id', System.getProperty("robolectric.dependency.repo.id") } } } |