java - Gradle不运行测试

标签 java unit-testing gradle intellij-idea

在我的Gradle项目中,我有一个非常简单的JUnit测试:

import org.junit.jupiter.api.Test
import static org.junit.jupiter.api.Assertions.fail

class ApiCallerTest {

    @Test
    void testSetApiKey() {
        fail();
    }
}

当我在IntelliJ中运行测试时,我会获得任务列表,并带有消息,表示生成成功。例如。:
Testing started at 19:52 ...
> Task :cleanTest UP-TO-DATE
> Task :compileJava UP-TO-DATE
> Task :compileGroovy NO-SOURCE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :compileTestJava NO-SOURCE
> Task :compileTestGroovy NO-SOURCE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test NO-SOURCE
BUILD SUCCESSFUL in 0s

因为我期望测试失败,所以不应该发生这种情况。我还收到一条消息“未收到测试事件”。

这是我的gradle.build文件:
plugins {
    id 'groovy'
    id 'java'
}

group 'com.ipdive'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testImplementation('org.junit.jupiter:junit-jupiter:5.6.0')
}

根据互联网上的建议,我尝试将这段代码添加到gradle.build文件中。
test {
    useJUnitPlatform()
}

但这没有帮助。

我还尝试将Gradle设置更改为“使用...运行测试”->“IntelliJ IDEA”。更改后运行测试时,出现错误消息:
Internal Error occurred.
org.junit.platform.commons.JUnitException: TestEngine with ID 'junit-jupiter' failed to discover tests
    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:189)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:168)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
    at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
    at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230)
    at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: org.junit.platform.commons.JUnitException: MethodSelector [className = 'ApiCallerTest', methodName = 'testSetApiKey', methodParameterTypes = ''] resolution failed
    at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:102)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:82)
    at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113)
    at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:45)
    at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69)
    at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:181)
    ... 6 more
Caused by: org.junit.platform.commons.PreconditionViolationException: Could not load class with name: ApiCallerTest
...
...

您能告诉我该怎么做,这样我才能使用Gradle进行单元测试吗?

编辑:添加了项目结构的屏幕截图。

Project structure

最佳答案

您可以使用官方junit5-samples中的配置。在这里,您可以找到使用以下配置的 junit5-jupiter-starter-gradle-groovy 项目:

plugins {
    id 'groovy'
    id 'eclipse' // optional (to generate Eclipse project files)
    id 'idea' // optional (to generate IntelliJ IDEA project files)
}

repositories {
    mavenCentral()
}

dependencies {
    implementation(localGroovy())
    testImplementation('org.junit.jupiter:junit-jupiter:5.6.0')
}

test {
    useJUnitPlatform()
    testLogging {
        events "passed", "skipped", "failed"
    }
}

它适用于Gradle 6.0.1,Java 8和11。

为了运行测试,您可以使用以下命令:gradle test或在您的IDE中进行配置,如下所示:

strong text

您会看到类似以下内容的内容:
Testing started at 17:34 ...
> Task :cleanTest
> Task :compileJava NO-SOURCE
> Task :compileGroovy UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :compileTestJava UP-TO-DATE
> Task :compileTestGroovy UP-TO-DATE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass$3$1 (file:/C:/Users/jmoreno/.gradle/caches/modules-2/files-2.1/org.codehaus.groovy/groovy-all/2.3.11/f6b34997d04c1538ce451d3955298f46fdb4dbd4/groovy-all-2.3.11.jar) to method java.lang.Object.finalize()
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.reflection.CachedClass$3$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
com.example.project.CalculatorTestsJava > addsTwoNumbers() PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[1] PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[2] PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[3] PASSED
com.example.project.CalculatorTestsJava > add(int, int, int)[4] PASSED
com.example.project.CalculatorTests > add(int, int, int)[1] PASSED
com.example.project.CalculatorTests > add(int, int, int)[2] PASSED
com.example.project.CalculatorTests > add(int, int, int)[3] PASSED
com.example.project.CalculatorTests > add(int, int, int)[4] PASSED
com.example.project.CalculatorTests > 1 + 1 = 2() PASSED
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 3s
5 actionable tasks: 2 executed, 3 up-to-date
17:34:08: Tasks execution finished ':cleanTest :test --tests *'.

要考虑的另一点是类的位置。根据文档,当我们使用groovy plugin时,我们只能在groovy文件夹中混合Java和groovy文件,在这种情况下,groovy类位于Java文件夹中,我们只能在其中放置Java文件。

同样重要的是,如果声明了不同版本的groovy,也可能会产生编译错误,因此使用正确的依赖项也很重要。

关于java - Gradle不运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60269105/

相关文章:

java - 我可以将引用的 JButton 添加到第二个 JPanel 吗?

java - Spring 联合测试

Javascript - 测试 DOM 操作

java - JsonParser 中的 toXML 在哪里,为什么该方法不可用?

java - Itext 7 在 pdf 中使用 Material ui 图标

java - MediaPlayer 在 Android 中工作,但没有进展

java - 如何在 Spring 中使用 setter 注入(inject)和 java 配置?

java - 测试 - 如何检查 HashMap 中是否添加了某些内容

android - 从 Kotlin 1.3.31 升级 -> 1.3.40 会破坏 Android 构建

dependencies - 使用 Gradle 下载传递依赖