Is Java's assertEquals method reliable?

java, junit, junit4, string

Solution

You should always use `.equals()` when comparing `Strings` in Java.

JUnit calls the `.equals()` method to determine equality in the method `assertEquals(Object o1, Object o2)`.

So, you are definitely safe using `assertEquals(string1, string2)`. (Because `String`s are `Object`s)

Here is a link to a great Stackoverflow question regarding some of the differences between `==` and `.equals()`.

Problem

I know that `==` has some issues when comparing two `Strings`. It seems that `String.equals()` is a better approach. Well, I'm doing JUnit testing and my inclination is to use `assertEquals(str1, str2)`. Is this a reliable way to assert two Strings contain the same content? I would use `assertTrue(str1.equals(str2))`, but then you don't get the benefit of seeing what the expected and actual values are on failure. On a related note, does anyone have a link to a page or thread that plainly explains the problems with `str1 == str2`?

Original source

Related problems