也许这很简单,但是我在网上找不到任何示例:
我想使用JUnit 5运行作为Groovy类实现的单元测试。我当前的设置似乎启动了JUnit 5,但是无法检测到测试用例。IntelliJ可以识别测试,但无法运行。如果添加Java单元测试,则可以正确启动。
这是我现在所拥有的:
项目结构
src
main
groovy
# production code
test
groovy
UnitTest.groovy
build.gradle
...
Run Code Online (Sandbox Code Playgroud)
build.gradle
plugins {
id 'groovy'
}
dependencies {
compile localGroovy()
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.1'
}
test {
useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)
单元测试
import org.junit.jupiter.api.Test
class UnitTest {
@Test
def shouldDoStuff() {
throw new RuntimeException()
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Gradle 4.10。
有任何想法吗?
JUnit要求所有测试方法都使用返回类型void
。Groovy的def
关键字被编译为Object
类型,因此您的方法在Java中将编译为以下形式:
import org.junit.jupiter.api.Test
public class UnitTest {
@Test
Object shouldDoStuff() {
throw new RuntimeException();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您将其作为Java测试进行尝试,则也不会找到该测试用例。解决方案非常简单-替换def
为void
,您的Groovy测试用例将正确执行。
src / test / groovy / UnitTest.groovy
import org.junit.jupiter.api.Test
class UnitTest {
@Test
void shouldDoStuff() {
throw new RuntimeException()
}
}
Run Code Online (Sandbox Code Playgroud)
演示:
归档时间: |
|
查看次数: |
824 次 |
最近记录: |