Java Junit4:ArrayList的assertEquals<;双倍>;具有单精度期望值
我正在为一个Java变量编写JUnit测试,该变量是Java Junit4:ArrayList的assertEquals<;双倍>;具有单精度期望值,java,arraylist,junit,junit4,precision,Java,Arraylist,Junit,Junit4,Precision,我正在为一个Java变量编写JUnit测试,该变量是ArrayList。复杂的是,我的期望值是单精度,而Java的Double是双精度。因此,由于精度错误,执行assertEquals(预期的数组列表,实际的数组列表)不会通过 我的工作是迭代所有元素,并将assertEquals每对double设置为适当的值。是否有一种方法可以为整个ArrayList设置epsilon,而不必将其分解为元素 JUnit4.6及以上版本有一个方便的方法(根据规范,对于字符串消息有一个重载变量)。在Java 8中,
ArrayList
。复杂的是,我的期望值是单精度,而Java的Double
是双精度。因此,由于精度错误,执行assertEquals(预期的数组列表,实际的数组列表)
不会通过
我的工作是迭代所有元素,并将
assertEquals
每对double设置为适当的值。是否有一种方法可以为整个ArrayList
设置epsilon
,而不必将其分解为元素 JUnit4.6及以上版本有一个方便的方法(根据规范,对于字符串
消息有一个重载变量)。在Java 8中,您可以非常轻松地将那些List
s转换为基本数组,只需使用它:
double delta = 0.05; // or any other reasonable value
double[] expectedArray =
expectedList.stream().mapToDouble(Double::doubleValue).toArray();
double[] actualArray =
actualList.stream().mapToDouble(Double::doubleValue).toArray();
assertArrayEqulas(expectedArray, actualArray, delta);
JUnit4.6及更高版本有一个方便的方法(根据规范,对于
字符串
消息有一个重载变量)。在Java 8中,您可以非常轻松地将那些List
s转换为基本数组,只需使用它:
double delta = 0.05; // or any other reasonable value
double[] expectedArray =
expectedList.stream().mapToDouble(Double::doubleValue).toArray();
double[] actualArray =
actualList.stream().mapToDouble(Double::doubleValue).toArray();
assertArrayEqulas(expectedArray, actualArray, delta);
您可以实现自己的方法,该方法可以获取预期的双精度值和实际的双精度值。然后你可以继续这个方法中的值。你可以实现一个自己的方法,它可以得到预期的双精度值和实际的双精度值。然后你可以用这个方法继续计算数值。@RoiEX先生,你[几乎]是正确的。再看一下,我发现这个方法是在JUnit4.6中添加的(由commit 41cbbf7e228b8f7908e672a79863ff970316b120引入)。不知道为什么我最初错过了它。我可能在看过时的Javadoc,真丢脸。我已经用这些信息编辑了我的答案。顺便说一句,做
expectedList.toArray(新的双精度[expectedList.size()])
来获取列表数组可能更容易些哦,我的错。。。我检查的版本是4.12而不是4.1:D@RoiEX否-我们正在尝试将java.lang.Double
列表转换为原始Double
s数组。这段代码甚至没有编译。非常感谢您的评论,我想一定有更好的方法来完成它!:)@先生,你几乎是对的。再看一下,我发现这个方法是在JUnit4.6中添加的(由commit 41cbbf7e228b8f7908e672a79863ff970316b120引入)。不知道为什么我最初错过了它。我可能在看过时的Javadoc,真丢脸。我已经用这些信息编辑了我的答案。顺便说一句,做expectedList.toArray(新的双精度[expectedList.size()])
来获取列表数组可能更容易些哦,我的错。。。我检查的版本是4.12而不是4.1:D@RoiEX否-我们正在尝试将java.lang.Double
列表转换为原始Double
s数组。这段代码甚至没有编译。非常感谢您的评论,我想一定有更好的方法来完成它!:)