2017-09-12 1 views
5

Ich habe Schwierigkeiten mit der Konfiguration einer Testumgebung basierend auf JUnit Jupiter (5). Ich habe zwei verschiedene Fehler dort:Konfiguration der Testumgebung: Android + JUnit 5 + Mockito + Spek + Kotlin

WARNING: TestEngine with ID 'spek' failed to discover tests 
org.junit.platform.commons.util.PreconditionViolationException: Could not load class with name... 

Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.launcher.Launcher.execute(Lorg/junit/platform/launcher/LauncherDiscoveryRequest;)V 
at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:61)... 

Und die Konfiguration geht wie folgt.

Haupt build.gradle:

apply plugin: 'org.junit.platform.gradle.plugin' 

buildscript { 
    ext.kotlin_version = '1.1.4-3' 
    repositories { 
     google() 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:3.0.0-beta5' 
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 
     classpath "org.junit.platform:junit-platform-gradle-plugin:1.0.0" 
     classpath "de.mannodermaus.gradle.plugins:android-junit5:1.0.0" 
    } 
} 

allprojects { 
    repositories { 
     google() 
     jcenter() 
     maven { url "http://dl.bintray.com/jetbrains/spek" } 
    } 
} 


junitPlatform { 
    filters { 
     engines { 
      include 'spek' 
     } 
    } 
} 

Modul build.gradle:

apply plugin: 'com.android.application' 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-android-extensions' 
apply plugin: 'de.mannodermaus.android-junit5' 

android { 

    compileSdkVersion 26 
    buildToolsVersion "26.0.0" 

    defaultConfig { 
     ... 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 

    ... 

    compileOptions { 
     targetCompatibility JavaVersion.VERSION_1_8 
     sourceCompatibility JavaVersion.VERSION_1_8 
    } 
} 


dependencies { 
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 
    implementation 'com.android.support:appcompat-v7:26.0.2' 
    implementation 'com.android.support:recyclerview-v7:26.0.2' 

    testImplementation 'org.jetbrains.spek:spek-api:1.1.4' 
    testImplementation 'org.jetbrains.spek:spek-junit-platform-engine:1.1.4' 

    testImplementation junit5() 
// testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.0.0' not needed when using the one above 
    testImplementation 'org.junit.platform:junit-platform-runner:1.0.0' 

    testImplementation 'org.mockito:mockito-core:2.8.47' 
    testImplementation 'com.nhaarman:mockito-kotlin-kt1.1:1.5.0' 
    testCompileOnly "de.mannodermaus.gradle.plugins:android-junit5-embedded-runtime:1.0.0" 
} 

Diese Konfiguration soll auf https://github.com/aurae/android-junit5 basieren. Aber ich habe es auch ohne es versucht.

Hat jemand eine funktionierende Konfiguration von Abhängigkeiten für diese Bibliotheken gefunden?

+1

verwandt. https://github.com/JetBrains/spek/issues/256 – tim

Antwort

2

Wie hier https://stackoverflow.com/a/48427771/4249825 geschrieben Sie Folgendes in die build.gradle benötigen:

App build.grale:

buildscript { 
    ... 
    dependencies { 
     ... 
     classpath "de.mannodermaus.gradle.plugins:android-junit5:1.0.30" // latest atm 
    } 
} 

Moduls build.gradle:

apply plugin: 'com.android.application' 
apply plugin: 'kotlin-android' 
apply plugin: 'kotlin-android-extensions' 
apply plugin: "de.mannodermaus.android-junit5" 

android { 
    ... 
    sourceSets { 
     test.java.srcDirs += 'src/test/kotlin' 
     androidTest.java.srcDirs += 'src/androidTest/kotlin' 
    } 
} 

project.ext { 
    spekVersion = "1.1.5" // latest atm 
    mockitoKotlinVersion = "2.0.0-alpha02" // latest atm 
    kluentVersion = "1.34" // latest atm 
} 

dependencies { 
    ... 
    // 
    // TESTS 
    testCompile "com.nhaarman.mockitokotlin2:mockito-kotlin:$mockitoKotlinVersion" 
    testImplementation "org.amshove.kluent:kluent-android:$kluentVersion" 
    testImplementation("org.jetbrains.spek:spek-api:$spekVersion") { 
     exclude group: "org.jetbrains.kotlin" 
    } 
    testImplementation("org.jetbrains.spek:spek-junit-platform-engine:$spekVersion") { 
     exclude group: "org.junit.platform" 
     exclude group: "org.jetbrains.kotlin" 
    } 
    testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" 

    testImplementation junit5.unitTests() 
    // see https://github.com/mannodermaus/android-junit5#android-studio-workarounds 
    testCompileOnly junit5.unitTestsRuntime() 
} 
Verwandte Themen