Alex Rivera | Logout

JUnit - assertSame

Asked 2010-05-21T13:15:13.657
24

Can someone tell me why assertSame() do fail when I use values > 127?

        import static org.junit.Assert.*;

        ...

        @Test
        public void StationTest1() {
          ..

          assertSame(4, 4);         // OK
          assertSame(10, 10);       // OK
          assertSame(100, 100);     // OK
          assertSame(127, 127);     // OK
          assertSame(128, 128);           // raises an junit.framework.AssertionFailedError!
          assertSame(((int) 128),((int) 128)); // also junit.framework.AssertionFailedError!
        }

I'm using JUnit 4.8.1.

Edit
Report

1 Answer

12

assertSame takes two Object arguments, and so the compiler has to autobox your int literals into Integer.

This is equivalent to

assertSame(Integer.valueOf(128), Integer.valueOf(128));

Now for values between -128 and 127, the JVM will cache the results of Integer.valueOf, so you get the same Integer object back each time. For values outside of that range, you get new objects back.

So for assertSame(127, 127), JUnit is comparing the same objects, hence it works. For assertSame(128, 128), you get different objects, so it fails.

Just another reason to be careful with autoboxing.

answered 2010-05-21T13:29:32.607

Your Answer