【问题标题】:Eclipse JUNIT: Why is it possible to sometimes do a compare on a failed assertequals(String,String) but not alwaysEclipse JUNIT:为什么有时可以对失败的 assertequals(String,String) 进行比较,但并非总是如此
【发布时间】:2011-08-02 11:03:54
【问题描述】:

我一开始以为只有当 assertequals 介于 2 个字符串之间时才会出现比较选项,这是有道理的。我相信我也解雇了一个 failNotEquals(String1,String2) 并且比较选项也出现了。当对象没有实现 equals 时,我已经这样做了,或者我希望使用我自己的规则比较是否相等,如果失败则失败。但是我在这里注意到了几次,有时 failNotequals(String,String) 没有启用“比较”选项。我错过了什么吗???

COMPARE 选项的说明 >compareprint stack trace

【问题讨论】:

    标签: eclipse junit


    【解决方案1】:

    当测试的最终结果是 junit.framework.ComparisonFailure 对象时,您将获得“比较”选项。在这种情况下,您可以看到两个对象(例如字符串)的视觉比较,并检查它们之间的区别。

    其他类型的结果,例如 java.lang.IllegalAccessError,不会被解析为那种效果,因为 Eclipse 不知道(也无法推断)您正在比较两个对象导致这样的结果,因此它不会为您提供相同的视觉效果。

    【讨论】:

      【解决方案2】:

      我不完全确定你的意思

      failNotEquals 不启用“比较”选项

      这里有几个想法。

      1. failNotEquals 接受三个参数,而不是两个:

        failNotEquals(消息,预期,实际);

      2. 即使字符串打印出来的结果相同,它们也不是同一个对象。您需要告诉 JUnit 如何比较它们。

      考虑这个小而有效的测试用例。

      import junit.framework.TestCase;
      
      public class DemoTest extends TestCase {
        public void testSomething() {
          String a = "Hello";
          assertTrue("Strings should be the same", "Hello".equals(a));
          failNotEquals("Strings should be the same", "Hello", a);
        }
      }
      

      assertTrue 有效,但 failNotEquals 无效。

      assertTrue 可能是你想要的。 "Hello".equals(a) 将正确比较字符串。您也可以在此处使用equalsIgnoreCase

      我猜测 failNotEquals 可能与您使用的很接近。它以java.lang.IllegalAccessError 失败。

      【讨论】:

      • 实际上您选择使用asssertTrue 是一个糟糕的选择,因为如果测试失败,它不包括wrong 字符串是什么,这就是您应该使用assertequals 的原因,因为它显示了预期和实际。您对使用 asserttrue 的评论是废话-更好的选择是 if(a.equalsIgnoreCase(b)) { failNotequals("message goes here", a, b ),它再次通过有意义的消息显示了差异。
      • 我不知道你提出了第 2 点。如果您阅读我的 q,它清楚地表明我自己进行比较,然后在测试失败时调用 failNotequals。 assertEquals() 做同样的事情。
      猜你喜欢
      • 2020-02-02
      • 2021-10-30
      • 1970-01-01
      • 2019-03-07
      • 2016-03-06
      • 1970-01-01
      • 2019-10-19
      • 2020-09-28
      相关资源
      最近更新 更多