SDK和Gradle升级后找不到RobolectricTestRunner类

时间:2018-09-20 07:13:12

标签: android android-gradle robolectric

我如下升级了最新的旧版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已过时,将来会被删除。请给我建议任何解决方案。

1 个答案:

答案 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 {}”定义。