用于Android测试的JUnit 5

ax6ht2ek  于 2022-11-11  发布在  Android
关注(0)|答案(4)|浏览(180)

如何为Android单元测试配置JUnit 5?我尝试过:

testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0")

但是它不起作用,当我运行以前最简单的单元测试时:

@Test
public void addition_isCorrect() throws Exception {
    assertEquals(4, 2 + 2);
}

我收到错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;
    at org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry.loadTestEngines(ServiceLoaderTestEngineRegistry.java:31)
    at org.junit.platform.launcher.core.LauncherFactory.create(LauncherFactory.java:42)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:36)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1
Empty test suite.
oxcyiej7

oxcyiej71#

有关Android上的JUnit 5支持,请参阅this issuethis issue

在您的顶级build.gradle[.kts] 文件中添加此构建脚本依赖项:

buildscript {
  dependencies {
    classpath("de.mannodermaus.gradle.plugins:android-junit5:1.8.2.1")
  }
}

并将以下行添加到您的应用或库 build.gradle[.kts] 文件中:

plugins {
  // ...
  id("de.mannodermaus.android-junit5")
}

dependencies {
  // Aggregator dependency on JUnit api, engine, and params
  testImplementation("org.junit.jupiter:junit-jupiter:5.9.1")
  // (Optional) If you also have JUnit 4-based tests
  testImplementation("junit:junit:4.13.2")
  testRuntimeOnly("org.junit.vintage:junit-vintage-engine:5.9.1")
}

如果您使用的是Android Gradle插件3.2.0或更高版本Gradle 4.7或更高版本,则可以使用上述解决方案。有关更多信息,请参阅plugin GitHub page

扩展答案

如果要在插装测试(androidTest 源集)中使用JUnit 5,请执行以下操作:
1.将这些依赖项添加到您的应用或库构建脚本:

androidTestImplementation("de.mannodermaus.junit5:android-test-core:1.3.0")
androidTestRuntimeOnly("de.mannodermaus.junit5:android-test-runner:1.3.0")

1.在测试类中使用ActivityScenarioExtension而不是ActivityScenarioRule

import de.mannodermaus.junit5.ActivityScenarioExtension

class MyActivityTest {

  @JvmField
  @RegisterExtension
  val scenarioExtension = ActivityScenarioExtension.launch<MyActivity>()

  @Test
  fun test1() {
    val scenario = scenarioExtension.scenario
    scenario.moveToState(Lifecycle.State.RESUMED)
    assertThat(scenario.state).isEqualTo(Lifecycle.State.RESUMED)
  }

  @Test
  fun test2(scenario: ActivityScenario<MyActivity>) {
    scenario.moveToState(Lifecycle.State.RESUMED)
    assertThat(scenario.state).isEqualTo(Lifecycle.State.RESUMED)
  }
}
smtd7mpg

smtd7mpg2#

Android Studio是基于IDEA的,对吗?
然后在此处查看此答案https://stackoverflow.com/a/46161799/1431016或直接阅读www.example.com上的用户指南http://junit.org/junit5/docs/current/user-guide/#running-tests-ide-intellij-idea
总结:

// Only needed to run tests in an IntelliJ IDEA that bundles an older version
testImplementation("org.junit.platform:junit-platform-launcher:1.0.0")
testImplementation("org.junit.jupiter:junit-jupiter-engine:5.0.0")
testImplementation("org.junit.vintage:junit-vintage-engine:4.12.0")

我还没有尝试过这个项目,但它可以帮助您在Android上使用JUnit 5:https://github.com/aurae/android-junit5

kwvwclae

kwvwclae3#

请始终使用官方版本

首先,请访问Junit的官方文档,网址为:https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api您将看到所有最新版本,例如x1c 0d1x
然后在您的应用/gradle中添加以下依赖项:
测试实现('org.junit.jupiter:junit-jupiter:X. X. X')
其中X.X.X是您想要的版本。例如,在我的例子中,它是
测试实现('org.junit.jupiter:junit-jupiter:5. 6. 0')

ddrv8njm

ddrv8njm4#

您可以通过将以下行添加到您的gradle文件来使用正式版本:

android {
    testOptions {
        unitTests.all {
            useJUnitPlatform()
    }
  }
}

dependencies {
     testImplementation "org.junit.jupiter:junit-jupiter:5.8.0"
}

要继续与Junit5一起运行JUnit4测试,请添加:

testImplementation "org.junit.vintage:junit-vintage-engine:5.8.0"

相关问题