使用 Groovy 和 JUnit 5 断言时出现 MissingMethodException

MissingMethodException when using Groovy and JUnit 5 Assertions

尝试使用 JUnit 5 class 断言,特别是 assertAll() with Groovy.

基本Java证明了以下语法:

@Test
public void someTest() {
    assertAll('heading',
        () -> assertTrue(firstName),
        () -> assertTrue(lastName)
    );
}

由于我坚持使用不支持 lambda 的 Groovy v2.4,所以我所做的看起来像(尝试了几个选项,但是所有这些选项都提供了相同的错误):

@Test
void 'Some test'() {
    assertAll('heading',
        { -> assert firstName },
        { -> assert lastName }
    )
}

错误信息:

groovy.lang.MissingMethodException:
No signature of method: static org.junit.jupiter.api.Assertions.assertAll() is applicable for argument 
types: (path.GeneralTests$_Some_test_closure10...)
values: [path.GeneralTests$_Some_test_losure10@1ef13eab, ...]

看起来问题出在 assertAll() 方法本身,异常很明显,但是要获得可能的解决方案是一个很大的挑战,因为我不得不从 Python 切换到 Groovy就在最近。

的确,我以后要和Groovy一起上一些课,但是你知道,你总是要提供昨天的结果。

非常感谢您的建议!

在这种特殊情况下,您需要将 Groovy 闭包显式转换为 org.junit.jupiter.api.function.Executable 接口:

import org.junit.jupiter.api.Test
import org.junit.jupiter.api.function.Executable

import static org.junit.jupiter.api.Assertions.*

class Test {
    @Test
    void 'Some test'() {
        assertAll('heading',
                { assertTrue(true) } as Executable,
                { assertFalse(false) } as Executable)
    }
}