前一段时间,我使用ProviderTestCase2创建了一些测试化的测试。现在,我想更新代码库,并尝试在当前环境中重新激活旧的测试。
1)当我更新到compileSdkVersion 28时,似乎不再有任何类ProviderTestCase2。清理和构建项目失败。 如果我回到版本27,则可以成功构建该项目。
2)我有一个特例,我想用一组测试来测试对象的不同变体。因此,我决定利用继承并将测试放在基类中,配置要由超类测试的对象。这过去曾经奏效。 (是的,我知道测试中的继承是不好的观点,但是在这种情况下就可以了;-))
现在不执行任何测试。 Android Studio抱怨说有一个空的测试套件。
还有警告,我在扩展JUnit3的类中使用JUnit4注释进行了测试。我不记得我曾经看过这些警告。
这是Android库中的错误吗?还是在哪里可以找到解决该问题的提示?
(使用Android Studio 3.2和最新的库)
答案 0 :(得分:6)
ProviderTestCase2战争已移除。应该使用ProviderTestRule
(来自支持测试库或AndroidX)。
请参阅:
添加com.android.support.test:rules
依赖性,以便能够使用规则。
以下是参考页中的示例:
@Rule
public ProviderTestRule mProviderRule =
new ProviderTestRule.Builder(MyContentProvider.class, MyContentProvider.AUTHORITY).build();
@Test
public void verifyContentProviderContractWorks() {
ContentResolver resolver = mProviderRule.getResolver();
// perform some database (or other) operations
Uri uri = resolver.insert(testUrl, testContentValues);
// perform some assertions on the resulting URI
assertNotNull(uri);
}
答案 1 :(得分:1)
接受的答案不正确。 ProviderTestRule
处于Beta版,因此不会弃用或删除ProviderTestCase2
。发生的事情是,该文件已移至您需要在build.gradle
中声明的库中:
useLibrary 'android.test.base'
请参阅:https://developer.android.com/training/testing/set-up-project
答案 2 :(得分:0)
TLDR
build.gradle
:
android {
useLibrary 'android.test.base' // for AndroidTestCase
useLibrary 'android.test.runner' // for ProviderTestCase2
useLibrary 'android.test.mock' // for MockContentProvider
}
有关各种基于JUnit
的库的Android文档,可通过useLibrary
调用:https://developer.android.com/training/testing/set-up-project#junit-based-libs
进一步的说明
mtotschnig's answer处在正确的轨道上,但还不完整。
首先,要导入ProviderTestCase2
,您需要
build.gradle
:
android {
useLibrary 'android.test.runner'
}
但是,ProviderTestCase2
扩展了AndroidTestCase
,因此您需要:
build.gradle
:
android {
useLibrary 'android.test.base'
}
最后,如果要扩展ProviderTestCase2
,则需要提供扩展ContentProvider
的类型,并且可能需要扩展MockContentProvider
来创建它。对于MockContentProvider
,您需要(thanks to Sienna's related answer):
build.gradle
:
android {
useLibrary 'android.test.mock'
}