代码之家  ›  专栏  ›  技术社区  ›  gmmo

roboletric4.0.1一直在buildActivity上抛出资源$NotFoundException

  •  1
  • gmmo  · 技术社区  · 7 年前

    我试图用roboletric构建非常简单的unittest,但是我不能创建活动。

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

    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
    

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

    有什么线索我做错了什么?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Xian    7 年前

    Robolectric找不到应用程序的资源。

    将此添加到您的 build.gradle

    android {
        testOptions {
            unitTests.includeAndroidResources = true
        }
    }
    

    gradle.properties (Android Studio 3.3+不需要:

    android.enableUnitTestBinaryResources=true
    
        2
  •  4
  •   amp    6 年前

    我在使用Robolectric4.2时遇到了这个问题。升级到4.2.1修复了该问题。