这是我的测试:
import org.junit.rules.ExpectedException;
@Rule
public final ExpectedException exception = ExpectedException.none();
@Test
public void testSearch() {
List<Integer> myList = Arrays.asList(new Integer[] {1, 2, 4, 6, 3, 1, 2});
exception.expect(NoSuchElementException.class);
SimpleSearch.search(myList, 5);
System.out.println("here");
exception.expect(NoSuchElementException.class);
assertEquals(1, SimpleSearch.search(myList, 22));
}
当我运行它时,它表示它运行了1/1但它没有打印here
并且它没有执行任何断言或运行行SimpleSearch.search(myList, 5);
下面的任何行(在异常被捕获之后) )。
如何在捕获异常后继续它(我想在同一个testSearch
函数内执行)?
答案 0 :(得分:2)
代码按设计工作。 ExpectedException
只是说:测试应该抛出这个特殊的异常,但是不意味着:并继续执行。任何异常都会在此时停止执行程序。在Java中绕过此方法的常用方法是使用try .. catch
块。
@Test
public void testSearch() {
List<Integer> myList = Arrays.asList(new Integer[] {1, 2, 4, 6, 3, 1, 2});
try {
SimpleSearch.search(myList, 5);
Assert.fail("Did not find NoSuchElementException!");
}
catch(NoSuchElementException ex) {
// ignored
}
System.out.println("here");
// the rest of your code is nonesense
}
答案 1 :(得分:2)
在这种情况下,您的测试应该更精细,并将2个测试用例分开
@Test(ExpectedException=NoSuchElementException.class)
public void testSearch_NotFound() {
List<Integer> myList = Arrays.asList(new Integer[] {1, 2, 4, 6, 3, 1, 2});
SimpleSearch.search(myList, 5);
}
@Test
public void testSearch() {
List<Integer> myList = Arrays.asList(new Integer[] {1, 2, 4, 6, 3, 1, 2});
assertEquals(1, SimpleSearch.search(myList, 22));
}