groovy - 使用 Groovy 和 JUnit 5 断言时出现 MissingMethodException
问题描述
尝试使用 JUnit 5 类断言,特别是带有 Groovy 的 assertAll()。
Basic Java 证明了以下语法:
@Test
public void someTest() {
assertAll('heading',
() -> assertTrue(firstName),
() -> assertTrue(lastName)
);
}
由于我坚持使用不支持 lambdas 的 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)
}
}
推荐阅读
- java - 在Java中拆分已经拆分的数组字符串
- sql - Oracle SQL 使用 yearweek to date 字段更新字符串字段
- angular - 安全的本地存储 Angular 6
- erlang - 使用 Elixir Genstage 的运行时动态计算图
- html - 在模板管理面板中配置的链接在网站上不起作用
- microsoft-graph-api - 从 Azure 注册的 Web 应用程序向 OneDrive API 发送 GET 请求时要使用哪些 Microsoft Graph 根资源?
- javascript - 在 PDF 表格的每一页中显示两个默认行
- jsf - 关闭对话框后更新表单
- angular - dialogRef.afterClosed 不是函数
- python - 将aes加密功能从php移植到python