JUnit тестирование для assertEqual NullPointerException
Я не уверен, почему тестовый случай не имеет вывода 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));
}
2 ответов:
Я полагаю, что вы хотите использовать
failздесь:@Test(expected=NullPointerException.class) public void testNullInput() { fail(nullString.indexOf(3)); }Обязательно добавьте
import static org.junit.Assert.fail;, если это необходимо.
В Java 8 и JUnit 5 (Jupiter) мы можем утверждать для исключений следующее. Используя
org.junit.jupiter.api.Assertions.assertThrowsОбщественная статический Т assertThrows(класса expectedType, Executable исполняемый файл)
Утверждает, что выполнение предоставленного исполняемого файла вызывает исключение типа expectedType и возвращает исключение.
Если исключение не возникает, или если возникает исключение другого типа, этот метод потерпит неудачу.
Если вы не хотите выполнять дополнительные проверки экземпляра исключения, просто проигнорируйте возвращаемое значение.
Этот подход будет использовать функциональный интерфейс@Test public void itShouldThrowNullPointerExceptionWhenBlahBlah() { assertThrows(NullPointerException.class, ()->{ //do whatever you want to do here //ex : objectName.thisMethodShoulThrowNullPointerExceptionForNullParameter(null); }); }Executableвorg.junit.jupiter.api.См. :
- http://junit.org/junit5/docs/current/user-guide/#writing-tests-assertions
- http://junit.org/junit5/docs/5.0.0-M2/api/org/junit/jupiter/api/Executable.html
- http://junit.org/junit5/docs/5.0.0-M4/api/org/junit/jupiter/api/Assertions.html#assertThrows-java.lang.Class-org.junit.jupiter.api.function.Executable-
Comments