unit-testing - java.lang.IncompleteClassChangeError org.junit.jupiter.params.provider.Arguments 必须是 InterfaceMethodref 常量

标签 unit-testing groovy junit junit5 junit-jupiter

import groovy.transform.CompileStatic
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.MethodSource

import java.util.stream.Stream

import static org.assertj.core.api.Assertions.assertThat

@CompileStatic
class MyUnitTest {


    @ParameterizedTest(name = "{index} => myString={0}")
    @MethodSource("provideData")
    void test(String myString) {

        assertThat("hallo").isEqualTo(myString)
    }

    private static Stream<Arguments> provideData() {
        return Stream.of(
          Arguments.of("hallo"))
    }
}

运行此 JUnit 5 测试会出现以下错误: 方法

org.junit.jupiter.params.provider.Arguments.of([Ljava/lang/Object;)Lorg/junit/jupiter/params/provider/Arguments; must be InterfaceMethodref constant java.lang.IncompatibleClassChangeError: Method org.junit.jupiter.params.provider.Arguments.of([Ljava/lang/Object;)Lorg/junit/jupiter/params/provider/Arguments; must be InterfaceMethodref constant

我使用 Java 10,并且在 build.gradle 中启用了 JUnit 5。

最佳答案

您的 Groovy 版本似乎太旧了。

看起来你被 https://issues.apache.org/jira/browse/GROOVY-7879 咬了 如果有人使用 Gradle,这个错误也是已知的,并通过 https://github.com/gradle/gradle/issues/721 报告。

关于unit-testing - java.lang.IncompleteClassChangeError org.junit.jupiter.params.provider.Arguments 必须是 InterfaceMethodref 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52541023/

相关文章:

Eclipse 构建时和运行时类路径,可轻松执行 junit 测试用例

java - Mockito java - 使用不同参数的测试方法调用

unit-testing - 规范2:多个匹配器表达式(单元规范)

angular - 使用导入的第三方依赖项对 Angular 服务方法进行单元测试

groovy - 使用soapUI中的Groovy teststep将请求/响应文件存储在本地目录中

groovy - 我们可以让这个片段更精彩吗?

java - 如何在 IntelliJ IDEA 中调试 RESTful Web 服务的 JUnit 测试类?

java - 如何使用 Junit 模拟 Builder

c# - 如何通过NSubstitute中的父类(super class)匹配参数来 stub 方法?

grails - 从命令行运行时grails使用哪个常规