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

JUnit4编写圆面积计算参数化测试用例报错解决方案

JUnit 4 圆面积计算参数化测试修正方案

错误原因

  • JUnit 4 中Assert.assertEquals(double expected, double actual)方法已被正式废弃:浮点数运算存在固有精度误差,框架强制要求调用三参数版本的方法,传入第三个非负delta值(允许的最大误差范围)完成比较。原测试代码虽然定义了delta字段,但调用断言时未传入该参数,直接触发运行时抛出Use assertEquals(expected, actual, delta) to compare floating-point numbers错误。
  • 原测试参数中配置的delta值为负数,属于无效配置:delta代表断言允许的预期值与实际值的绝对差值上限,取值必须大于等于0。
  • IDE提示Circle类中的findarea(int)方法不支持传入(int, double)类型参数是废弃API触发的误报,修正断言方法的传参后该提示会自动消失。

修正后可直接运行的测试代码

package BasicTesting;

import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class CircleTest {
    private final int input;
    private final double expected;
    private final double delta;

    // 构造函数绑定测试参数
    public CircleTest(int input, double expected, double delta) {
        this.input = input;
        this.expected = expected;
        this.delta = delta;
    }

    @Parameters
    public static Iterable<Object[]> testConditions() {
        // 当前业务代码pi取两位小数,delta设为0.001即可满足精度校验要求,必须为非负值
        return Arrays.asList(new Object[][] {
            {1, 3.14d, 0.001d},
            {2, 12.56d, 0.001d},
            // 可自行追加边界测试用例,比如半径为0、负数半径等场景
            {0, 0d, 0.001d}
        });
    }

    @Test
    public void testFindArea() {
        // 调用三参数非废弃断言API,匹配方法签名要求
        assertEquals(expected, Circle.findarea(input), delta);
    }
}

补充说明

被测的Circle.findarea是静态方法,不需要实例化Circle对象即可调用,原测试类中创建的Circle ob实例属于冗余代码,不影响运行但可以删除。如果需要扩展测试场景,直接在testConditions的参数列表中追加对应测试数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:00:53