如何创建涉及引发异常的JUnit测试?

时间:2019-05-04 17:14:38

标签: java junit

如何在run函数中测试异常?

 `    public void run() {
     ArrayBlockingQueue<String> bookQueue = 
     library.getBookQueue(book);
     try {
        bookQueue.take();
        try {
            updateState(State.IN_PROGRESS);
            Thread.sleep(READ_TIME_MS);
            bookQueue.put(book);
            updateState(State.ENDED);
        } catch(InterruptedException e){
            bookQueue.put(book);
        }
    } catch(InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    finally {
        updateState(State.ENDED);
    }
   }`

1 个答案:

答案 0 :(得分:1)

@Test批注中,您可以指定预期的异常

例如

@Test(expected=IndexOutOfBoundsException.class) 
 public void outOfBounds() {
   new ArrayList<Object>().get(1);
}

您可以以相同的方式编写测试方法并在其中调用run方法

@Test(expected=Exception.class) 
 public void testRun() {
   run();
}

我们还可以通过在测试方法中考虑@GhostCat suggestions in the comments, you can add try-catch`来改善这一点

@Test
 public void testRun() {
    tyr {
       run();
      Asserts.fail(); // 
      }
     catch(Exception ex) {
      assertTrue(//some condition);
      assertEquals(//some condition);
     }
 }

如果run()方法未引发任何异常,则测试将由于Asserts.fail()而失败,或者在任何异常情况下,catch块声明语句都将被执行