web-dev-qa-db-ja.com

AndroidJUnit4を標準のJUnitランナーおよびデリゲートランナー「org.robolectric.RobolectricTestRunner」で使用しようとしましたがロードできませんでした

私はespressoを使用していくつかのテストを実行していますが、テストがエスプレッソ専用であるため、roboelectricがこのエラーに含まれる理由がわかりません。以下はエラーです。

Java.lang.Exception: Attempted to use AndroidJUnit4 with standard JUnit runner and delegate runner 'org.robolectric.RobolectricTestRunner'could not be loaded. Check your build configuration.
at Android.support.test.runner.AndroidJUnit4.loadRunner(AndroidJUnit4.Java:89)
at Android.support.test.runner.AndroidJUnit4.loadRunner(AndroidJUnit4.Java:63)
at Android.support.test.runner.AndroidJUnit4.<init>(AndroidJUnit4.Java:57)
at Java.lang.reflect.Constructor.newInstance0(Native Method)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:343)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.Java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.Java:86)
at androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.Java:63)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.Java:26)
at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.Java:153)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.Java:59)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.Java:73)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.Java:104)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.Java:789)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.Java:543)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.Java:386)
at Android.app.Instrumentation$InstrumentationThread.run(Instrumentation.Java:2145)

espressoのドキュメントに従いましたが、すべてが順調です。何が問題になる可能性があります:

以下は私のgradleファイルです:

apply plugin: 'com.Android.application'
apply plugin: 'jacoco'


jacoco {
    toolVersion = "0.7.6.201602180812"
}

tasks.withType(Test) {
    jacoco.includeNoLocationClasses = true
}

task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {

    reports {
        xml.enabled = true
        html.enabled = true
    }

    def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'Android/**/*.*']
    def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/debug", excludes: fileFilter)
    def mainSrc = "$project.projectDir/src/main/Java"

    sourceDirectories = files([mainSrc])
    classDirectories = files([debugTree])
    executionData = fileTree(dir: project.buildDir, includes: [
            'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
    ])
}


Android {

    adbOptions {
        timeOutInMs 60 * 1000
    }

    compileSdkVersion 28
    defaultConfig {
        applicationId "com.levelapp.converge.convergelevelapp"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        debug {
            testCoverageEnabled true
        }

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }

    testOptions {
        animationsDisabled true

        unitTests {
            includeAndroidResources = true
        }

        unitTests.all {
            jacoco {
                includeNoLocationClasses = true
            }
        }
    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.Android.support:appcompat-v7:28.0.0'
    implementation 'com.Android.support:animated-vector-drawable:28.0.0'
    implementation 'com.Android.support:exifinterface: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'
    androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.Android.support:cardview-v7:28.0.0'
    implementation 'com.Android.support:recyclerview-v7:28.0.0'
    androidTestUtil 'com.Android.support.test:orchestrator:1.0.2-alpha1'
    testImplementation 'junit:junit:4.12'
    testImplementation 'org.robolectric:robolectric:3.7.1'
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.koushikdutta.ion:ion:2.+'
    implementation 'com.mikhaellopez:circularimageview:3.2.0'
    implementation 'com.Android.support:multidex:1.0.3'


    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.0'
    androidTestImplementation 'androidx.test:runner:1.1.0'
    androidTestImplementation 'androidx.test:rules:1.1.0'


    androidTestImplementation('com.Android.support:multidex-instrumentation:1.0.1') {
        exclude group: 'com.Android.support', module: 'multidex'
    }

}

次に、実行中のテストは次のとおりです。

@Rule
public ActivityTestRule<MainActivity> activity = new ActivityTestRule<>(MainActivity.class);

@Test
public void loadRecyclerview(){

    Espresso.onView(ViewMatchers.withId(R.id.rv)).
            perform(RecyclerViewActions.actionOnItemAtPosition(0, ViewActions.click()));

    Espresso.onView(withId(R.id.text))
            .check(matches(withText("k33too")))
            .check(matches(isDisplayed()));
}

何が問題なのでしょうか?

8
Idris Stack

AndroidXを使用しているようです。正しいインポートを使用していることを確認してください。今日この問題に出くわしましたが、まだ古いimport Android.support.test.runner.AndroidJUnit4;使用するべきだったときimport androidx.test.runner.AndroidJUnit4;

これでエラーが修正されました。

10
Zac

Zacの答えに加えて、これを解決するには以下の依存関係を利用する必要がありました。

import androidx.test.ext.junit.runners.AndroidJUnit4

アプリのbuild.gradleで、この依存関係があることを確認してください。

androidTestImplementation 'androidx.test.ext:junit:1.1.0'

Android.buildConfig、あなたが持っていることを確認してください:

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

5
ChrisBorg

Gradleファイルに依存関係を追加しましたが、Roboelectricをすぐに見つけることができます

    testImplementation 'org.robolectric:robolectric:4.0'

それが役に立てば幸い

3
Cesar

kotlinの更新。すべての@Rule注釈の形式は@get:Rule-それは私の場合問題でした。

2
Filipkowicz