在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时,这是否可以实现?
答案
你可以使用NumberFormat
或BigDecimal
下面将是圆形的
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(),还有更好的选择吗?的主要内容,如果未能解决你的问题,请参考以下文章