我如下升级了最新的旧版android应用程序,
CompileSDK 23到27 BuildTools 23.0.2至27.0.3 SupportLibVersion 23.0.2至27.1.1
下面是我先前和当前的源集和测试选项代码
sourceSets {
main {
assets.srcDirs = ['src/main/assets', 'src/main/assets/']
java.srcDirs = ['src/main/java', 'src/main/java']
}
robolectric {
java.srcDir file('src/test/java/')
resources.srcDir file('src/test/resources')
}
}
当前版本已由“ robolectric”更改为“ androidTest”并添加了“ testOptions”任务,否则将无法编译。
sourceSets {
main {
assets.srcDirs = ['src/main/assets', 'src/main/assets/']
java.srcDirs = ['src/main/java', 'src/main/java']
}
androidTest {
setRoot 'src/test/'
java.srcDir file('src/test/java/')
resources.srcDir file('src/test/resources')
}
}
testOptions {
unitTests {
includeAndroidResources = true
}
}
这就是我整合Robolectric的方式
testImplementation 'org.robolectric:robolectric:3.3.2'
进行上述更改后,gradle同步成功,但是无法识别并且找不到与Robolectric相关的类。
我尝试将aapt2enabled设置为“ false”,在这种情况下,gradle同步本身无法说明aapt2已过时,将来会被删除。请给我建议任何解决方案。
答案 0 :(得分:0)
您的测试类不得位于“ androidTest”目录中,而应位于“本地单元测试”目录(https://developer.android.com/studio/test/)中,即“ test”而不是“ androidTest”。
因为“ androidTest”目录仅适用于在硬件设备或仿真器上运行的检测测试。 Robolectric的优点是它不需要在设备或仿真器上运行。因此,您可以在gradle文件中将“ androidTest”更改为“ test”,也可以从gradle文件中删除整个“ androidTest {}”定义,因为src / test是“本地单元测试”目录的默认路径。>
我可以通过将测试类从src / androidTest移到src / test来解决问题。但是您也必须从gradle文件中删除“ androidTest {}”定义。