junit assertEquals ignore case

Erki M. picture Erki M. · Jul 15, 2013 · Viewed 26.8k times · Source

im just moving from c# -> java. I need to write some tests using junit. In my test i need to compare two strings to see if they match. So we also have the Assert.assertEquals, but this is case sensitive. How can i make it case insensitive? What i need is:

"blabla".equals("BlabLA")

to return true.

So in C#, we used to have :

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

I was quickly going thru Junit docs, but i can't seem to find anything like this.

Answer

John B picture John B · Jul 15, 2013

I find that Hamcrest provides must better assertions than the default JUnit asserts. Hamcrest gives MANY MANY more options and provides better messages on failure. Some basic Hamcrest matchers are built into JUnit and JUnit has the assertThat built in so this is not something totally new. See the hamcrest.core package in the JUnit API here. Try IsEqualIgnoringCase which would look like this.

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

With static imports this would be

assertThat(myString, equalToIgnoringCase(expected));

if you want to get really fancy you would do:

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

One of the advantages of this is that a failure would state that expected someString but was someOtherString. As opposed to expected true got false when using assertTrue.