Search code examples
javaarraystestngassert

Runtime problems in TestNG asserts


I have a TestNG assertion which may occasionally fail due to the state of the object asserted (ArrayList element), and when it does, I would like to display this state.

I created an example which will fail in runtime, to illustrate the concept

import static org.testng.Assert.assertEquals;



@Test
public void sandbox() {
    ArrayList<Integer> arr = new ArrayList<>();
    assertEquals(arr.size(), 0, "The problem is: " + arr.get(0).toString());
}

I expected the assertion to pass and it will, when I remove the third argument (message). I see it's not a TestNG issue as execution is not stepping in the statement, but rather fails directly at this step with

at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)

What's the best approach here? I am thinking of a method which will take care of the exception, but perhaps there are better known ways.

Thanks


Solution

  • Below should work:

    import static org.testng.Assert.assertEquals;
    
    
    @Test
    public void sandbox() {
        ArrayList<Integer> arr = new ArrayList<>();
        assertEquals(arr.size(), 0, "The problem is: " + arr);
    }
    
    

    This is more practical as well, because if list is not empty it will print all values from the list instead of the first.