2014-03-25 203 views
7

我不知道爲什麼測試用例沒有輸出true。這兩種情況都應該給出NullPointerExceptionJUnit測試assertEqual NullPointerException

我已經試過這樣做(不完全一樣,但它給和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()); 
} 

亞軍:

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()); 
    } 
} 

方法:

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(expected=NullPointerException.class) 
public void testNullInput() { 
    assertEquals(nullString.indexOf(3), StringMethods.myIndexOf(null, 'd',3)); 
} 
+1

這是完全不清楚你想測試或斷言這裏。爲什麼在同一測試方法中同時存在斷言和預期異常?由於'NullPointerException',斷言永遠不會到達。 –

回答

16

我相信你想在這裏使用fail

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

確保添加import static org.junit.Assert.fail;,如果你需要。

1

在Java 8和JUnit 5(Jupiter)中,我們可以爲異常聲明如下。 使用org.junit.jupiter.api.Assertions.assertThrows

公共靜態<Ť延伸的Throwable>ŤassertThrows(<類T> expectedType, 可執行可執行)

斷言所提供的可執行的執行投expectedType並返回的一個異常例外。

如果沒有拋出異常,或者拋出了不同類型的異常,則此方法將失敗。

如果您不想對異常實例執行額外的檢查,只需忽略返回值即可。

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

這一方法將使用功能接口Executableorg.junit.jupiter.api

參見: