在Eclipse中,如何在失败时看到Assert.assertEquals的输入?

时间:2010-01-24 18:45:42

标签: eclipse assert junit4

我不是一个Eclipse大师,所以请原谅我的笨拙。

在Eclipse中,当我调用Assert.assertEquals(obj1,obj2)并且失败时,如何让IDE向我显示obj1和obj2?

我正在使用JExample,但我想这不应该有所作为。


修改:这就是我看到的内容:
 http://img86.yfrog.com/img86/3002/jexample.png

6 个答案:

答案 0 :(得分:6)

  1. 当您的对象有点复杂时,与故障跟踪的比较并不是一件容易的事。
  2. 如果尚未重新定义toString(),则与调试器进行比较非常有用。它作为解决方案仍然非常繁琐,因为你应该用眼睛检查两侧的每个物体。
  3. Junit Eclipse插件在出现故障时提供了一个选项:“将Real与Expected TestResult进行比较”。该视图与经典内容比较工具非常接近: Comparison with String objects


    问题是,只有当您使用assertEquals()对象编写String时才可以使用它(在屏幕截图中,我们可以看到角落中的选项未提出,没有String类): Comparison with no String objects

    您可以在对象中使用toString()进行断言,但这不是一个好的解决方案:

    • 首先,您将toString()equals(Object)相关联...修改一个必须修改另一个。
    • 其次,语义不再受到尊重。 toString()应该返回一个有用的方法来调试一个对象的状态,而不是识别Java语义中的对象(equals(Object))。

    据我所知,我认为JUnit Eclipse插件错过了一个功能 当比较失败时,即使我们不比较String个对象,它也应该提供依赖于toString()方法的两个对象的比较。
    它可以提供一种比较两个不等于对象的最小视觉方式。
    当然,由于equals(Object)不一定与toString()相关,所以应该用我们的眼睛研究突出的差异,但它已经是一个非常好的基础,无论如何,它比没有比较工具好得多。 / p>

答案 1 :(得分:4)

如果JUnit视图中的信息不够,则可以始终在例如java.lang.AssertionError上设置异常断点。运行测试时,调试器将在实际抛出异常之前立即停止。

答案 2 :(得分:3)

Assert.assertEquals()会将预期和实际对象的toString()表示放在它抛出的AssertionFailedError的消息中,而eclipse将在“失败跟踪”部分显示该对象。 JUnit视图:

alt text http://www.ibm.com/developerworks/java/library/j-xp042203/junitAssertionFailure.gif

如果您要检查复杂对象,则必须使用调试器并在Assert.assertEquals()

中放置断点

答案 3 :(得分:1)

你在看什么?

当你执行assertTrue()并且它失败时,你会看到一个空值。

但是当你做assertEquals时,它应该向你展示它的预期和它实际得到的东西。

如果您正在使用JUnit,请确保您正在查看JUnit视图并将鼠标移动到失败的测试。

答案 4 :(得分:1)

如果断言失败,

FEST Assert将显示比较对话框,即使您比较的对象不是字符串。我更详细地解释了on my blog

答案 5 :(得分:0)

如果您要比较的是String,那么您可以双击stack元素,它会弹出一个对话框,显示eclipse中的diff。

这仅适用于Strings。对于一般情况,查看真正原因的唯一方法是安装断点并进入它。