对assertEqual NullPointerException的JUnit测试

时间:2014-03-25 01:11:15

标签: java junit junit4

我不确定为什么测试用例的输出不是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 个答案:

答案 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

参考: