【发布时间】:2020-02-17 19:20:17
【问题描述】:
在我的 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 运行我的单元测试吗?
编辑:添加项目结构的屏幕截图。
【问题讨论】:
-
你能分享你的包层次结构的截图吗?我很好奇你的
test包是否被标记为“测试源根”。 -
添加项目结构截图。
-
你使用哪个 Gradle 版本?
-
让
class ApiCallerTest公开吧?! -
@Jocke 没必要。 JUnit 5 也可以处理包私有范围类。
标签: java unit-testing gradle intellij-idea