在JUnit中测试捕获的异常

时间:2016-11-07 02:47:41

标签: java exception junit exception-handling

我正在尝试创建一个测试,以验证我的代码(请参阅下面的伪代码)正确捕获异常。我知道JUnit能够使用以下代码测试代码是否抛出异常:

@Test (expected = ArrayIndexOutOfBoundsException.class)

但是,我正在测试的软件的原始代码捕获此异常并打印消息

catch (ArrayIndexOutOfBoundsException E) {
    System.out.print("The output should be of even length!");
}

JUnit有没有办法验证此消息?或者我应该用我的口号改变一些东西?

注意:我读过我应该使用以下内容:

@Rule 
public ExpectedException thrown = ExpectedException.none();

@Test
public void decodeOddLengthInput() {
    thrown.expect(ArrayIndexOutOfBoundsException.class);
    thrown.expectMessage("Message");

但程序崩溃是因为它无法识别ExpectedException对象。

我试图测试的方法的伪代码(由于隐私原因,不要发布确切的内容):

public String decode(byte[] array){
try{
for(int i= 0; i<array.length; i= i+2){
//basically it crashes when input is an array of odd length (because of i=i+2)
   get byte at array[i] and turn it into a string;
   }
 }
catch (ArrayIndexOutOfBoundsException E) { System.out.print("Message!");}

  return string ;
  }

1 个答案:

答案 0 :(得分:1)

您的软件方法不会通过消息重新抛出异常。它只是通过打印消息来吃异常。在这种情况下,调用测试方法永远不会知道此异常,因此您无法测试此方案或验证消息。