【问题标题】:junit assertEquals ignore casejunit assertEquals 忽略大小写
【发布时间】:2013-07-15 10:28:11
【问题描述】:

我刚从 c# -> java 迁移。我需要使用junit编写一些测试。 在我的测试中,我需要比较两个字符串以查看它们是否匹配。 所以我们也有 Assert.assertEquals,但这是区分大小写的。我怎样才能使它不区分大小写? 我需要的是:

"blabla".equals("BlabLA")

返回真。

所以在 C# 中,我们曾经有:

public static void AreEqual (
    string expected,
    string actual,
    bool ignoreCase,
    string message
)

我正在快速浏览 Junit 文档,但我似乎找不到这样的东西。

【问题讨论】:

    标签: java unit-testing testing junit junit4


    【解决方案1】:

    我发现Hamcrest 提供的断言必须比默认的JUnit 断言更好。 Hamcrest 提供了更多选择,并提供了更好的失败信息。一些基本的Hamcrest 匹配器内置在JUnit 中,JUnit 内置了assertThat,所以这并不是全新的东西。请参阅 JUnit API here 中的 hamcrest.core 包。试试IsEqualIgnoringCase,看起来像这样。

    assertThat(myString, IsEqualIgnoringCase.equalToIgnoringCase(expected));
    

    对于静态导入,这将是

    assertThat(myString, equalToIgnoringCase(expected));
    

    如果你想变得非常花哨,你会这样做:

    assertThat(myString, is(equalToIgnoringCase(expected)));
    

    这样做的一个优点是失败会表明expected someString but was someOtherString。与使用 assertTrue 时的 expected true got false 不同。

    【讨论】:

    • 对不起,我对 java 很陌生,知道为什么我会得到这个吗?似乎是正确的导入.. 1) AddNewTrip(PikoFuncTests.Tests.Trip.AddNewTripTest) java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V at org. hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18) at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8) at PikoFuncTests.PageObjects.MainView.Trip.TripMainView.ValidateResultsTable(TripMainView.java:147)
    • 当您导入了 2 个不同版本的 Hamcrest 时,通常会发生这种情况。 JUnit 中包含一个,因此如果您包含 hamcrest-all 以获取该功能,则可能存在增量。尝试使用 junit-dep 而不是 junit。 -dep 版本不附带 Hamcrest,因此您的 Hamcrest 导入将是唯一的。
    • 这是一篇描述该问题的帖子:stackoverflow.com/questions/7869711/…
    【解决方案2】:

    使用

    "blabla".equalsIgnoreCase("BlabLA") use for check equality ignore case
    

    然后就可以使用了

     assertTrue("blabla".equalsIgnoreCase("BlabLA"))
    

    【讨论】:

    • 它 assertTrue(s1.equalsIgnoreCase(s2));就是这样
    【解决方案3】:

    JUnit 中没有直接支持此断言(当然假设您使用的是 JUnit),但您可以使用:

    assertTrue("blabla".equalsIgnoreCase("BlabLA"))
    

    可能值得将其包装在一个单独的辅助方法中,如果它们不匹配,它会提供一个合理的失败消息(查看assertTrue 的文档以了解如何做到这一点)。

    【讨论】:

    • 不用担心——尽管查看@JohnB 的答案,但我认为这会产生更好的结果(即,如果测试失败,输出会更好),并且可以说更具可读性。
    【解决方案4】:

    怎么样:

    assertEquals("blabla","BlabLA".toLowerCase());
    

    assertEquals(expectedLowerCaseString,actualString.toLowerCase());
    

    那么如果它们不相等,你仍然可以看到差异。

    【讨论】:

      【解决方案5】:

      你看过String JavaDoc吗?

      "blabla".equalsIgnoreCase("BlabLA")
      

      【讨论】:

        【解决方案6】:

        您可以使用assertTrue(s1.equalsIgnoreCase(s2))

        【讨论】:

          【解决方案7】:

          为您的断言考虑 AssertJ(以前的 FEST),多年来它一直是我最喜欢的测试断言 API:

          assertThat("blabla").isEqualToIgnoringCase("BlabLA");
          

          【讨论】:

            【解决方案8】:

            检查string文档中的equalsIgnoreCase

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-02-08
              • 2021-05-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多