Baz*_*Baz 9 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");
Run Code Online (Sandbox Code Playgroud)
如果可以使用流优雅地完成,那么我就开始提出这些建议.Hamcrest的建议也很受欢迎.
请注意,它assertEquals也适用于Lists和Sets.这更少打字,它会给出非常明确的错误消息.
如果不允许返回值包含重复项,则它们应返回Set而不是List.如果您可以通过这种方式更改正在测试的功能,可以按如下方式进行测试:
assertEquals(new HashSet<>(Arrays.asList("Item1", "Item2")), get_products());
Run Code Online (Sandbox Code Playgroud)
如果这不是一个选项,您应该对预期结果和实际结果进行排序并比较:
asssertEquals(Arrays.sort(Arrays.asList("Item1", "Item2")), Arrays.sort(get_products()));
Run Code Online (Sandbox Code Playgroud)
最后你可以使用Hamcrest匹配器(函数containsInAnyOrder在org.hamcrest.collection.IsIterableContainingInAnyOrder):
assertThat(get_products(), containsInAnyOrder("Item1", "Item2"));
Run Code Online (Sandbox Code Playgroud)
我建议使用AssertJ -
import static org.assertj.core.api.Assertions.assertThat;
// ......
List<String> products = get_products("test_produc").stream()
.map(Product::getName)
.collect(toList());
assertThat(products).containsExactlyInAnyOrder("Third", "Second", "First");
Run Code Online (Sandbox Code Playgroud)
此外,它还为您提供了更多流畅的断言(尤其是异常处理断言).
| 归档时间: |
|
| 查看次数: |
4244 次 |
| 最近记录: |