使用 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)
}
}
尝试使用 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)
}
}