You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Comparator.comparing编写JUnit测试?测试执行失败

如何正确测试基于价格的Product列表Comparator

你的测试失败的原因

  1. 语法错误:测试代码存在两处语法问题,会导致编译或运行异常:

    • 测试方法定义缺少括号:public void getComparisonProducts{ 应改为 public void getComparisonProducts() {
    • 两个add语句末尾缺少分号:productsList.add(product) 和 productsList.add(product2) 都需要补充;
  2. 测试逻辑不合理:你通过断言comparator.compare(productsList.get(0), productsList.get(1)) == -1验证排序结果,这是在重复验证Comparator的内部逻辑,而非直接验证排序后的列表是否符合预期。更合理的方式是直接检查排序后元素的价格顺序是否符合升序要求。

修正后的测试代码

方式一:验证排序后的列表顺序(推荐)

这种方式直接验证排序结果是否符合业务预期,更贴合测试的核心目的:

@Test
public void testProductSortByPriceAsc() {
    // 准备测试数据
    List<Product> productsList = new ArrayList<>();
    
    Product product1 = new Product();
    product1.setPrice(11.22);
    productsList.add(product1);
    
    Product product2 = new Product();
    product2.setPrice(22.11);
    productsList.add(product2);

    // 执行排序
    Comparator<Product> comparator = Comparator.comparing(Product::getPrice);
    productsList.sort(comparator);

    // 断言排序结果:第一个元素价格更小,第二个更大
    assertEquals(11.22, productsList.get(0).getPrice(), 0.001); // 用delta处理浮点数精度问题
    assertEquals(22.11, productsList.get(1).getPrice(), 0.001);
}

注意:由于浮点数存在精度误差,断言时需要加上delta参数(比如0.001),避免因微小精度差异导致测试失败。

方式二:直接测试Comparator的逻辑

如果想单独验证Comparator的正确性,可以直接调用它的compare方法:

@Test
public void testProductPriceComparator() {
    Product product1 = new Product();
    product1.setPrice(11.22);
    
    Product product2 = new Product();
    product2.setPrice(22.11);
    
    Product product3 = new Product();
    product3.setPrice(11.22);

    Comparator<Product> comparator = Comparator.comparing(Product::getPrice);
    
    // 验证升序逻辑:小值在前返回负数
    assertTrue(comparator.compare(product1, product2) < 0);
    // 大值在前返回正数
    assertTrue(comparator.compare(product2, product1) > 0);
    // 相等值返回0
    assertEquals(0, comparator.compare(product1, product3));
}

用范围判断正负比直接断言等于-1更稳妥,能兼容更多Comparator实现的返回逻辑。

内容的提问来源于stack exchange,提问作者cassioliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:30:45