Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit4:ArrayList的assertEquals<;双倍>;具有单精度期望值_Java_Arraylist_Junit_Junit4_Precision - Fatal编程技术网

Java Junit4:ArrayList的assertEquals<;双倍>;具有单精度期望值

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中,

我正在为一个Java变量编写JUnit测试,该变量是
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数组。这段代码甚至没有编译。非常感谢您的评论,我想一定有更好的方法来完成它!:)