Android 单元测试不会使用正确的应用程序 class
Android unit tests won't use correct Application class
关于 android 在单元测试中如何选择 Application
class,我遇到了一些奇怪的行为。
我在目录 src/testDevelopmentDebug
中有 Robolectric 个单元测试
我在 src/testDevelopmentDebug
和 androidTestDevelopment
之间也有一些测试代码,分别用于单元测试和浓缩咖啡测试。共享代码在 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
class,但它并不完全有效。我在共享测试文件夹中有 SharedTestApplication
。但是当我像这样在 testDevelopmentDebug/AndroidManifest.xml
文件中引用它时:
<application android:name="com.books.sharedtest.SharedTestApplication"/>
Espresso 测试使用 SharedTestApplication
就像我期望的那样。
单元测试默认回到我的 src/main
Application
class 并改用它。现在这是奇怪的部分。如果我在 src/testDevelopmentDebug
中扩展 SharedTestApplication
并且什么都不做。 (甚至不更改清单)然后它使用 SharedTestApplication
就像我想要的那样。
知道为什么吗?
Robolectric 正在加载默认值 AndroidManifest.xml
,除非您在 @Config
中指定不同的清单。您也可以在 @Config
中指定应用程序 class。
在 tutorial 中查看更多信息。
关于 android 在单元测试中如何选择 Application
class,我遇到了一些奇怪的行为。
我在目录 src/testDevelopmentDebug
我在 src/testDevelopmentDebug
和 androidTestDevelopment
之间也有一些测试代码,分别用于单元测试和浓缩咖啡测试。共享代码在 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
class,但它并不完全有效。我在共享测试文件夹中有 SharedTestApplication
。但是当我像这样在 testDevelopmentDebug/AndroidManifest.xml
文件中引用它时:
<application android:name="com.books.sharedtest.SharedTestApplication"/>
Espresso 测试使用 SharedTestApplication
就像我期望的那样。
单元测试默认回到我的 src/main
Application
class 并改用它。现在这是奇怪的部分。如果我在 src/testDevelopmentDebug
中扩展 SharedTestApplication
并且什么都不做。 (甚至不更改清单)然后它使用 SharedTestApplication
就像我想要的那样。
知道为什么吗?
Robolectric 正在加载默认值 AndroidManifest.xml
,除非您在 @Config
中指定不同的清单。您也可以在 @Config
中指定应用程序 class。
在 tutorial 中查看更多信息。