Eclipse JUNIT:为什么有时可以对失败的assertequals(String,String)进行比较,但并非总是如此

时间:2011-08-02 11:03:55

标签: eclipse junit

我认为,如果断言在2个字符串之间,那么比较选项仅出现在测试中,这是有道理的。我相信我也发了一个failNotEquals(String1,String2),比较选项也出现了。当对象没有实现equals时,或者我希望使用我自己的规则比较相等性,并且如果失败则失败,我已经这样做了。但是我在这里注意了几次有时失败注意(String,String)不启用“比较”选项。我错过了什么吗?

COMPARE选项的澄清 >比较< option是一个菜单选项,当一个人从gui右键单击一个失败的junit项时,它可以创建一个包含每个“test”项目的树。通常还有一个>打印堆栈跟踪<选项。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

我不完全确定你的意思

  

failNotEquals不启用“比较”选项

以下是一些想法。

  1. failNotEquals需要三个参数,而不是两个:

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

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

  3. 考虑这个小型的工作测试案例。

    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