我正在尝试创建一个测试,以验证我的代码(请参阅下面的伪代码)正确捕获异常。我知道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 ;
}
答案 0 :(得分:1)
您的软件方法不会通过消息重新抛出异常。它只是通过打印消息来吃异常。在这种情况下,调用测试方法永远不会知道此异常,因此您无法测试此方案或验证消息。