预期值:java.lang.Long<;1>;但是was:java.lang.Integer<;1>;

预期值:java.lang.Long<;1>;但是was:java.lang.Integer<;1>;,java,junit,Java,Junit,我正在使用JUnit测试一些代码 本节如下: assertEquals(query.get(0).get("FEEDBACK_ID"), feedbackValues.getFeedbackId()); 导致以下错误: java.lang.AssertionError: expected: java.lang.Long<1> but was: java.lang.Integer<1> 为了避免测试失败,是否将其转换为整数?我知道将右边的项目转换为长项目会更容易

我正在使用JUnit测试一些代码

本节如下:

    assertEquals(query.get(0).get("FEEDBACK_ID"), feedbackValues.getFeedbackId());
导致以下错误:

java.lang.AssertionError: expected: java.lang.Long<1> but was: java.lang.Integer<1>

为了避免测试失败,是否将其转换为整数?我知道将右边的项目转换为长项目会更容易,但我不想这样做。

您想要实现的目标是错误的,因此唯一有效的答案是:不要这样做。基本上,您正在尝试将行为添加到方法中,以匹配您的测试。在这种情况下,你在测试什么?当然不是方法。即使发生这种情况的可能性很小,向下转换到
int
可能会导致整数溢出,并导致测试失败

测试不应该向测试方法的输出添加额外的转换,否则谁来测试这些额外的转换?为什么API不返回要操作的类型


您的方法应该返回相同的类型,或者您应该将
int
结果提升为
long
,因为这是安全的。

如果一个是
Integer
,另一个是
long
,那么最好将这两个值都测试为
long
,而不是
int
。对
assertEquals
使用
Number#longValue
但我不想这样做。
最简单的解决方案是注释掉整行。测试通过,工作完成。(注:这当然不是严肃的建议,只是一个玩笑。但我想说的严肃点是,如果你愿意破解你的测试而不是解决问题,你可能会完全放弃测试。是的,在这种情况下,你可以说它不在这里也不在那里,但这是一个滑坡。)@AlexR这是个很糟糕的主意…@biziclop将你的int值转换为long并不是一个黑客行为,这是一个有效的改变。将long转换为int是一种黑客行为,不会给JUnit测试的有效性带来太大的安全性。@Kon任何时候,只要您愿意更改正确的测试逻辑以适应UUT的怪癖,而不是相反的方式,都是黑客行为。为什么类型不相同?查询返回错误的类型或
反馈值。getFeedbackId()
,没有第三个选项。当然,在这种情况下,在测试逻辑中鬼鬼祟祟地进行强制转换的实际后果可能是零,但一般来说,这是一个坏主意。
query.get(0).get("FEEDBACK_ID")