Android单元测试将不会使用正确的应用程序类

我正在遇到一些奇怪的行为,就像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类,并使用它。 现在这是怪异的部分。 如果我在src/testDevelopmentDebug扩展SharedTestApplication ,则不做任何事情。 (甚至不改变清单),那么它就像我想要的那样使用SharedTestApplication

任何想法为什么?

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

在教程中查看更多内容。