2014-03-25 16 views
7

Ich bin mir nicht sicher, warum der Testfall keine Ausgabe von true hat. Beide Fälle sollten eine NullPointerException ergeben.JUnit-Test für assertEqual NullPointerException

Ich habe versucht, dies zu tun (nicht genau das gleiche, aber es gibt und Ausgabe von true):

String nullStr = null; 

//@Test 
public int NullOutput1() { 
    nullStr.indexOf(3); 
    return 0; 
} 

//@Test(expected=NullPointerException.class) 
public int NullOutput2() { 
    nullStr.indexOf(2); 
    return 0; 
} 

@Test(expected=NullPointerException.class) 
public void testboth() { 
    assertEquals(NullOutput1(), NullOutput2()); 
} 

Runner:

import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 

public class TestRunnerStringMethods { 
    public static void main(String[] args) { 
     Result result = JUnitCore.runClasses(TestJunitMyIndexOf.class); 
     for (Failure failure : result.getFailures()) { 
      System.out.println(failure.toString()); 
     } 
     System.out.println(result.wasSuccessful()); 
    } 
} 

Methode:

public static int myIndexOf(char[] str, int ch, int index) { 
     if (str == null) { 
      throw new NullPointerException(); 
     } 
     // increase efficiency 
     if (str.length <= index || index < 0) { 
      return -1; 
     } 
     for (int i = index; i < str.length; i++) { 
      if (index == str[i]) { 
       return i; 
      } 
     } 
     // if not found 
     return -1; 
    } 

-Test Fall:

@Test(expected=NullPointerException.class) 
public void testNullInput() { 
    assertEquals(nullString.indexOf(3), StringMethods.myIndexOf(null, 'd',3)); 
} 
+1

Es ist völlig unklar, was Sie hier zu testen oder zu behaupten versuchen. Warum haben Sie sowohl eine Assert- als auch eine erwartete Ausnahme in derselben Testmethode? Die Assert wird aufgrund der 'NullPointerException' niemals erreicht. –

Antwort

16

Ich glaube, Sie wollen hier fail verwenden:

@Test(expected=NullPointerException.class) 
public void testNullInput() { 
    fail(nullString.indexOf(3)); 
} 

Stellen Sie sicher, import static org.junit.Assert.fail; hinzufügen, wenn Sie benötigen.

1

In Java 8 und JUnit 5 (Jupiter) können wir Ausnahmen wie folgt geltend machen. org.junit.jupiter.api.Assertions.assertThrows

public static < T Verwenden erstreckt Throwable> T assertThrows (Klasse < T> expectedType, Executable ausführbaren)

Asserts dass die Ausführung der gelieferten ausführbaren eine Ausnahme des expectedType wirft und kehrt die Ausnahme.

Wenn keine Ausnahme ausgelöst wird oder wenn eine Ausnahme eines anderen Typs ausgelöst wird, schlägt diese Methode fehl.

Wenn Sie keine zusätzlichen Prüfungen für die Ausnahmeinstanz durchführen möchten, ignorieren Sie einfach den Rückgabewert.

@Test 
public void itShouldThrowNullPointerExceptionWhenBlahBlah() { 
    assertThrows(NullPointerException.class, 
      ()->{ 
      //do whatever you want to do here 
      //ex : objectName.thisMethodShoulThrowNullPointerExceptionForNullParameter(null); 
      }); 
} 

Dieser Ansatz wird die funktionale Schnittstelle Executable in org.junit.jupiter.api verwenden.

Siehe:

Verwandte Themen