3

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

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

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


编辑:这是我看到的:(来源:yfrog.com


4

6 回答 6

6
  1. 当您的对象有点复杂时,与故障跟踪进行比较并不是一件容易的事。
  2. 如果您没有重新定义 toString(),则与调试器进行比较很有用。作为解决方案,它仍然非常繁琐,因为您应该用眼睛从两侧检查每个物体。

Junit Eclipse 插件在失败时提供了一个选项:“比较实际与预期的测试结果”。该视图与经典的内容比较工具非常接近: 与字符串对象的比较


问题是它仅在您assertEquals()使用String对象编写时才可用(在屏幕截图中,我们可以看到角落中的选项没有提出没有String类): 与没有 String 对象的比较

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

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

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

于 2011-03-23T13:15:50.850 回答
4

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

于 2010-01-24T19:55:33.777 回答
3

Assert.assertEquals()会将toString()预期和实际对象的表示放在AssertionFailedError它抛出的消息中,并且 Eclipse 将在 JUnit 视图的“故障跟踪”部分显示它:

替代文字
(来源:ibm.com

如果您有要检查的复杂对象,则必须使用调试器并在其中放置一个断点Assert.assertEquals()

于 2010-01-24T18:54:31.093 回答
1

你在看什么?

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

但是当您执行 assertEquals 时,它应该向您展示它所期望的和实际得到的。

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

于 2010-01-24T18:54:59.373 回答
1

即使您比较的对象不是字符串,FEST Assert也会在断言失败的情况下显示比较对话框。我在我的博客上更详细地解释了它。

于 2011-04-07T16:44:12.747 回答
0

如果您要比较的是字符串,那么您可以双击堆栈元素,它将弹出一个对话框,显示 Eclipse 中的差异。

不过,这只适用于字符串。对于一般情况,查看真正原因的唯一方法是安装断点并单步执行。

于 2015-02-04T09:26:56.990 回答