java - 当列表内容无序时 AssertEquals

标签 java junit hamcrest

<分区>

如果产品可以按任何顺序返回,您将如何重构以下内容?

List<Product> products = get_products("test_produc");
assertEquals(products.size(),3);
assertEquals(products.get(0).getName(), "test_product1");
assertEquals(products.get(1).getName(), "test_product2");
assertEquals(products.get(2).getName(), "test_produc3");

如果可以使用流优雅地完成,那么我不接受这样的建议。也欢迎 Hamcrest 建议。

最佳答案

请注意,assertEquals 也可以直接作用于列表和集合。这大大减少了输入,并且会给出非常清晰的错误消息。

如果不允许返回值包含重复项,则它们应该返回一个 Set 而不是 List。如果您可以通过这种方式更改您正在测试的功能,您可以按如下方式对其进行测试:

assertEquals(new HashSet<>(Arrays.asList("Item1", "Item2")), get_products());

如果这不是一个选项,您应该对预期结果和实际结果进行排序并比较它们:

asssertEquals(Arrays.sort(Arrays.asList("Item1", "Item2")), Arrays.sort(get_products()));

最后,您可以使用 Hamcrest 匹配器(函数 containsInAnyOrderorg.hamcrest.collection.IsIterableContainingInAnyOrder 中):

assertThat(get_products(), containsInAnyOrder("Item1", "Item2"));

关于java - 当列表内容无序时 AssertEquals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714408/

相关文章:

android - 在 Espresso 中,我如何测试 RecyclerView 的 *any* child 是否包含正确的文本

unit-testing - 如何初始化一个对象并将其用于所有测试用例

java - 使用 HIbernate 从数据库检索日期时获取错误的日期时间字段值

dependency-injection - CDI 可以注入(inject)我的 Bean 的远程实例吗?

java - 如何使用junit和mockito为私有(private)void方法编写测试用例

java - 为什么 JUnit 会忽略基类上的 @Category 注解?

java - 是否有用于递归比较目录的匹配器?

java - Spring Boot Hibernate 中的 H2 DB 不生成 Db Schema

java - Jmeter 中的 XML 路径断言

Java - 公共(public)静态无效主要()