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

标签 java android unit-testing robolectric

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

我在目录 src/testDevelopmentDebug 中有 Robolectric 单元测试

我还有一些测试代码在 src/testDevelopmentDebugandroidTestDevelopment 之间共享,分别用于单元测试和浓缩咖啡测试。共享代码在 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 并且什么都不做。 (甚至不更改 list )然后它像我希望的那样使用 SharedTestApplication

知道为什么吗?

最佳答案

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

tutorial 中查看更多信息.

关于java - Android 单元测试不会使用正确的应用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195036/

相关文章:

Android、OpenGLES、CmdLine 工具,获取 MainDisplay 分辨率

java - 如何捕获错误 'Bitmap too large to be uploaded into a texture'

java - Android 对话框和内存

javascript - isolateScope() 给出未定义的 - 使用 Karma 的单元测试指令

java - Java中泛型类型的实际返回类型是什么?

java lang nullpointerException 但仅适用于三星 GT-N5110 Note 8

c# - 对sql字符串进行单元测试

unit-testing - AssertJ:记录所有通过(和失败)的断言

java - 不支持的 major.minor 版本 51.0,但所有内容都设置为 JDK 1.6

java - 创建具有未指定可变行长度的多维数组 (Java)