如果产品可以按任何顺序返回,您将如何重构以下内容?
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 匹配器(函数 containsInAnyOrder
在 org.hamcrest.collection.IsIterableContainingInAnyOrder
中):
assertThat(get_products(), containsInAnyOrder("Item1", "Item2"));