在Junit测试中,如何比较两个ArrayList 使用assertEquals(),还有更好的选择吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Junit测试中,如何比较两个ArrayList 使用assertEquals(),还有更好的选择吗?相关的知识,希望对你有一定的参考价值。

我正在写一个Junit测试,我使用assertEquals()来比较两个ArrayList<Double>的值。

@Test
public void test(){

        QuadraticFormula one = new QuadraticFormula(3, 4, -4);
        List<Double> results = new ArrayList<>();
        results.add(0.66666);
        results.add(-2.0);

        assertEquals(results, one.getRoots());
    }

但是,Junit打印出以下失败消息:

expected:<[0.66666, -2.0]> but was:<[0.6666666666666666, -2.0]>
junit.framework.AssertionFailedError

无论如何,我可以指定我希望测试比较多少小数位?我知道如何测试两个double值的相等性到一定的准确度,但无论如何,当比较两个双列的ArrayList时,这是否可以实现?

答案

你可以使用NumberFormatBigDecimal

下面将是圆形的

    double d = 0.66666666;
    NumberFormat format = new DecimalFormat("#.##");
    System.out.println(format.format(d)); // 0.67
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println(bigDecimal); // 0.67

如果你不想要四舍五入

    double d = 0.66666666;
    DecimalFormat format = new DecimalFormat("#.##");
    format.setRoundingMode(RoundingMode.DOWN);
    System.out.println(format.format(d)); // 0.66
    BigDecimal bigDecimal = new BigDecimal(d);
    bigDecimal = bigDecimal.setScale(2, RoundingMode.DOWN);
    System.out.println(bigDecimal); //0.66
另一答案

我想你可以使用BigDecimal而不是Double。

检查这个SO以获取更多details

以上是关于在Junit测试中,如何比较两个ArrayList 使用assertEquals(),还有更好的选择吗?的主要内容,如果未能解决你的问题,请参考以下文章

JUnit手动设计测试方法以及与Randoop的自动生成测试的比较

在Maven项目中运行JUnit 5测试用例

JUnit 4 Vs TestNG比较

如何将JUnit测试结果写入日志文件

Junit使用教程

如何使用junit4写单元测试用例