我收到以下错误:
Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
对于我的Junit测试中的这行代码,请注意,getScore()返回一个双精度:
assertEquals(2.5, person.getScore());
这是我的断言导入:
import static org.junit.Assert.*;
这是什么原因造成的?我该如何解决?
如果您特别想避免强制转换并使用原始版本,您可以从包装对象获取原始结果。例如:
double a = 2.0;
Double b = 2.0;
assertEquals(a, b.doubleValue()); //Deprecated so use the one with delta
Integer c = 2;
int d = 2;
assertEquals(c.intValue(), d);
Long e = 2L;
long f = 2L;
assertEquals(e.longValue(), f);
如果您对使用Assert.assertEquals(双精度,双精度)
(原始版本)特别感兴趣,请尝试调用允许偏差的覆盖方法并将允许偏差设置为零,如下所示:
assertEquals(2.5, person.getScore(), 0.0);
如果person,您可能还希望第三个参数不是零。允许getScore()与2.5稍有不同。例如,如果可以接受
2.500001,那么您的测试将变为
assertEquals(2.5, person.getScore(), 0.000001);
getScore()返回的是双精度,而不是双精度。因此编译器感到困惑:它应该将两个参数都转换为对象,还是只将Double转换为Double?
double a = 2.0;
Double b = 2.0;
// assertEquals(a,b); // fails to compile
// the compiler is confused whether to use
assertEquals((Object) a,(Object) b); // OK
// or
assertEquals(a,(double) b); // OK
无论如何,我会将方法设置为返回基元类型双精度。
在我的JUnit测试中,我将预期的XML文件与解析器创建的虚拟文档进行比较: 但区别声称并不相似。那么如何正确比较这两个XML文档呢?
例如,我正在进行web自动化测试,假设我有两个非常基本的场景: 测试a)步骤1:将记录添加到数据库步骤2:检查网站是否正确显示记录 测试b)步骤1:在网站上编辑记录步骤2:检查记录是否正确保存在数据库中 根据记录,假设它是一个带有“值”的简单文本字段 因此,对于第一种情况,我将使用Assert equal: 但是,对于第二种情况,它将是: 所以基本上它们都做相同的事情,但都是相反的,为了在断言不正
我在Codewars.com参加培训测试, 说明是: 在此kata中,您必须在给定字符串的情况下,用字母在字母表中的位置替换每个字母。 如果文本中的任何内容不是字母,请忽略它,不要返回它。“A”=1,“B”=2. 我已经制作了这样的PHP脚本 但当我提交我的答案时,它包含的错误就像 请谁能帮忙修一下?告诉我为什么它显示错误的细节?
问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,
更新 更准确地说。我想知道这两个列表是否有相同的对象,两个列表都没有额外的对象,顺序无关紧要。例如:
我找到了junit的解决方案,但需要TestNG的解决方案。还有比编写一个自己的for循环更有用的想法吗?