【问题标题】:Roboletric 4.0.1 keeps throwing Resources$NotFoundException on buildActivityRobolectric 4.0.1 在构建活动中不断抛出 Resources$NotFoundException
【发布时间】:2018-11-11 14:35:54
【问题描述】:

我正在尝试使用 roboletric 构建非常简单的单元测试,但我无法创建活动。

我尝试了线程上的建议,但没有成功。

Resources$NotFoundException when calling Robolectric.buildActivity()

然而,我使用的是 4.0.1 版本。我想知道我是否需要做一些额外的设置。

这是我的毕业作品:

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    testImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    testImplementation 'androidx.test:core:1.0.0'
    testImplementation 'androidx.test.ext:junit:1.0.0'
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.mockito:mockito-core:2.23.0'
    testImplementation 'org.robolectric:robolectric:4.0.1'
    androidTestImplementation 'com.google.truth:truth:0.42'
    testImplementation 'com.google.truth:truth:0.42'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
}

还有我的测试程序:

@Config(sdk = 28, manifest=Config.NONE)
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest {
    private Activity activity;
    @Before
    public void setup() {

        try {
            // I tried these 3 lines of code and they all throw the exception :(

            //activity = Robolectric.buildActivity(MainActivity.class).create().get();
            //activity = Robolectric.setupActivity(MainActivity.class);
            activity = Robolectric.buildActivity(MainActivity.class).create().start().resume().get();
        }
        catch (Exception e)
        {
            System.out.println("Keeps throwing exception!");
        }
    }
}

这里是输出:

[Robolectric] com.guitarv.robotest.MainActivityTest.validateTextViewContent: sdk=28; resources=legacy
[Robolectric] NOTICE: legacy resources mode is deprecated; see http://robolectric.org/migrating/#migrating-to-40
Keeps throwing exception!
Test:Sun Nov 11 06:21:59 PST 2018

我确实点击了该链接并将 gradle.properties 更新为:

org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.enableUnitTestBinaryResources=true

但没有成功。我仍然无法创建活动,并且旧模式消息不断显示。

任何线索我做错了什么?

谢谢。

【问题讨论】:

  • 没有必要使用 @Config(sdk = 28) 作为 robolectric 选择 SDK 作为项目默认 SDK,在你的情况下我猜是 28 和 .我遇到了类似的问题并通过将测试类 SDK 更改为 27 @Config(sdk = 27) 来解决
  • 我试过了,没有成功。让一个简单的测试程序工作是多么困难的事情:(
  • 您是否确保包含文档中提到的 android 资源? testOptions { unitTests { includeAndroidResources = true } }
  • 就是这样!谢谢!

标签: unit-testing robolectric


【解决方案1】:

Robolectric 找不到您应用的资源。

将此添加到您的build.gradle

android {
    testOptions {
        unitTests.includeAndroidResources = true
    }
}

将此添加到您的gradle.properties(Android Studio 3.3+ 不需要):

android.enableUnitTestBinaryResources=true

【讨论】:

  • 还是得到输出
【解决方案2】:

我在使用 Robolectric 4.2 时遇到了这个问题。升级到 4.2.1 解决了这个问题。

【讨论】:

  • 这个,结合添加android.enableUnitTestBinaryResources=true到gradle.properties
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 2016-08-11
  • 2021-02-17
相关资源
最近更新 更多