gpt4 book ai didi

java - JUnit hamcrest 长比较

转载 作者:行者123 更新时间:2023-12-02 09:10:42 25 4
gpt4 key购买 nike

我有以下测试代码:

Page<Long> users = userService.findAllUserIdsWithLocationsWithoutCategories(pageable);
assertEquals(1, users.getTotalElements());
assertThat(users.getContent(), hasSize(1));
assertThat(users.getContent(), containsInAnyOrder(user5.getId()));

但失败并出现以下错误:

java.lang.AssertionError: 
Expected: iterable with items [<132L>] in any order
but: not matched: <132>

我做错了什么以及如何解决它?

最佳答案

实际返回类型

您正在调用getContent()关于返回值 Page<Long> 。这将返回 List<Long>作为docs状态:

List<T> getContent()

Returns the page content as List.

合适的匹配器

所以你可以使用HamcrestMatchers for Collections 。我会使用 hasItem()检查列表中是否包含一项(例如 user5.getId() )。

匹配相同类型

但请注意传递给 hasItem() 的参数类型。 预期值的类型应为 Longlong (自动装箱),因为 List<Long>实际元素有类型Long .

你的参数的返回类型是什么user5.getId()

错误消息显示您正在期待 intInteger (因为缺少 L 长):

not matched: <132>

而您的列表返回 Long 的元素(因此错误消息中的后缀 L):

iterable with items [<132L>]

解决方案:类型转换或重新设计

您可以转换预期的 getId()到所需的类型Long : assertThat(users.getContent(), containsInAnyOrder( (Long) user5.getId() ));

或者你勇敢地重新设计被测方法返回Page<Integer> 。背后的道理:因为大多数ID都是实现为Integer (参见 user5.getId() )所有相关方法(如 findAllUserIdsWithLocationsWithoutCategories )应在其签名中尊重该类型并返回 Integer s。

关于java - JUnit hamcrest 长比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59446044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com