关于java:如何测试索引越界错误?

How to test for index out of bounds error?

本问题已经有最佳答案,请猛点这里访问。

我编写了以下方法,它从带有开始索引和结束索引的字符串中获取子字符串。对于超出界限的索引,如何在JUnit中编写测试用例?例如,如果字符串是banana,并且该方法作为getsubstring(3,12)运行,则该方法将抛出一个越界错误。当显示此错误时,如何编写将通过的测试用例?

1
2
3
4
5
6
7
8
9
10
11
12
public String getSubstring(int start, int end){
        sub = MyString.str.substring(start, end);
        return sub;
    }



@Test
public void testgetSubstring() {
    MyString test = new MyString();
    String result = test.getSubstring(3,12);
}


在JUnit中有很多方法可以做到这一点,但最好的方法是使用ExpectedException功能。您设置了一个@Rule,它指定您的测试可能会抛出一个异常,并且您可以设置这个异常将是什么样的期望——它将具有什么类型,什么消息等等。

在你的测试课上,你想要

1
@Rule public ExpectedException exceptionRule = ExpectedException.none();

然后在应该抛出异常的代码行之前,您可以编写

1
exceptionRule.expect(MyException.class);

然后,如果抛出正确的异常,您的测试将成功;但是如果它到达末尾而没有抛出异常,它将失败。

有关可以在ExpectedException规则中设置的更多期望,请参阅javadoc。