Android单元测试不会使用正确的Application类

时间:2017-04-03 22:00:24

标签: java android unit-testing robolectric

关于android如何在单元测试中选择Application类,我遇到了一些奇怪的行为。

我在目录src/testDevelopmentDebug

中进行了Robolectric单元测试

我还在src/testDevelopmentDebugandroidTestDevelopment之间分享了一些测试代码,分别用于单元测试和espresso测试。共享代码位于src/sharedTest,我在build.gradle文件中进行了此设置,如下所示:

sourceSets {
    // Android Studio / the Android Studio Kotlin Plugin will stop recognizing these source folders as source
    // folders without explicitly setting them
    main.java.srcDirs += 'src/main/kotlin'
    testDevelopmentDebug.java.srcDirs += 'src/testDevelopmentDebug/kotlin'
    androidTestDevelopment.java.srcDirs += 'src/androidTestDevelopment/kotlin'

    // Share code between UI and unit tests.
    def sharedTestDir = 'src/sharedTest/kotlin'
    androidTestDevelopment.java.srcDirs += sharedTestDir
    testDevelopmentDebug.java.srcDirs += sharedTestDir
}

我的问题是我正在尝试在两者之间分享一个Application课程,但它并没有完全奏效。我在共享测试文件夹中有SharedTestApplication。但是当我在testDevelopmentDebug/AndroidManifest.xml文件中引用它时,如下所示:

<application android:name="com.books.sharedtest.SharedTestApplication"/>

Espresso测试使用SharedTestApplication,就像我期望的那样。

单元测试默认返回到我的src/main Application类并改为使用它。现在这里是奇怪的部分。如果我在SharedTestApplication中延伸src/testDevelopmentDebug而不执行任何其他操作。 (甚至没有更改清单)然后它使用我想要的SharedTestApplication

知道为什么吗?

1 个答案:

答案 0 :(得分:1)

Robolectric 正在加载默认AndroidManifest.xml,除非您在@Config中指定了不同的清单。您也可以在@Config中指定应用程序类。

tutorial

中查看更多内容