我不是 Eclipse 大师,所以请原谅我的笨拙。
在 Eclipse 中,当我调用 Assert.assertEquals(obj1,obj2) 并且失败时,如何让 IDE 显示 obj1 和 obj2?
我正在使用JExample,但我想这不应该有所作为。
编辑:这是我看到的:(来源:yfrog.com)
。
Junit Eclipse 插件在失败时提供了一个选项:“比较实际与预期的测试结果”。该视图与经典的内容比较工具非常接近:
问题是它仅在您assertEquals()
使用String
对象编写时才可用(在屏幕截图中,我们可以看到角落中的选项没有提出没有String
类):
您可以toString()
在断言中使用您的对象,但这不是一个好的解决方案:
toString()
与equals(Object)
……对一个的修改必须对另一个进行修改。toString()
应该返回一个有用的方法来调试一个对象的状态,而不是在 Java 语义中识别一个对象 ( equals(Object)
)。据我说,我认为 JUnit Eclipse 插件缺少一个功能。
当比较失败时,即使我们不比较String
对象,它也应该提供依赖于它们toString()
方法的两个对象的比较。
它可以提供一种比较两个不相等对象的最小视觉方式。
当然,由于equals(Object)
不一定与toString()
,突出的差异应该用我们的眼睛来研究,但这已经是一个很好的基础,无论如何,它比没有比较工具要好得多。
如果 JUnit 视图中的信息对您来说还不够,您可以随时设置异常断点,例如 java.lang.AssertionError。运行测试时,调试器将在实际抛出异常之前立即停止。
Assert.assertEquals()
会将toString()
预期和实际对象的表示放在AssertionFailedError
它抛出的消息中,并且 Eclipse 将在 JUnit 视图的“故障跟踪”部分显示它:
(来源:ibm.com)
如果您有要检查的复杂对象,则必须使用调试器并在其中放置一个断点Assert.assertEquals()
你在看什么?
当您执行 assertTrue() 并且它失败时,您会看到一个空值。
但是当您执行 assertEquals 时,它应该向您展示它所期望的和实际得到的。
如果您使用的是 JUnit,请确保您正在查看 JUnit 视图并将鼠标移动到失败的测试。
即使您比较的对象不是字符串,FEST Assert也会在断言失败的情况下显示比较对话框。我在我的博客上更详细地解释了它。
如果您要比较的是字符串,那么您可以双击堆栈元素,它将弹出一个对话框,显示 Eclipse 中的差异。
不过,这只适用于字符串。对于一般情况,查看真正原因的唯一方法是安装断点并单步执行。