检查异常后,JUnit测试代码停止执行

时间:2016-11-30 00:07:18

标签: java junit

这是我的测试:

  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函数内执行)?

2 个答案:

答案 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));
  }