我不确定为什么测试用例的输出不是true
。两种情况都应该给出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));
}
答案 0 :(得分:19)
我相信你想在这里使用fail
:
@Test(expected=NullPointerException.class)
public void testNullInput() {
fail(nullString.indexOf(3));
}
如果需要,请务必添加import static org.junit.Assert.fail;
。
答案 1 :(得分:3)
在Java 8和JUnit 5(Jupiter)中,我们可以声明异常,如下所示。
使用org.junit.jupiter.api.Assertions.assertThrows
public static&lt; T延伸Throwable&gt; T assertThrows(Class&lt; T&gt; expectedType, 可执行的可执行文件)
断言执行提供的可执行文件会抛出expectedType的异常并返回异常。
如果没有抛出异常,或者抛出了不同类型的异常,则此方法将失败。
如果您不想对异常实例执行其他检查,只需忽略返回值。
@Test
public void itShouldThrowNullPointerExceptionWhenBlahBlah() {
assertThrows(NullPointerException.class,
()->{
//do whatever you want to do here
//ex : objectName.thisMethodShoulThrowNullPointerExceptionForNullParameter(null);
});
}
该方法将使用Executable
中的功能界面org.junit.jupiter.api
。
参考: