2016-11-18 226 views
1

我将以代码示例开始;我必须测试一个处理数据包的函数。在这个函数中,数据包被打开,并且当它不包含所有期望的数据时,抛出一个InvalidParameterExeption被记录。测试Junit是否捕获到异常

public void handleData(dataPacket) { 
    try { 
     analyseData(dataPacket); 
    } catch (InvalidParameterException e) { 
     e.printStackTrace() 
    } 
} 

所以,如果一切顺利,我的例外是打印在我的终端。 但我该如何测试呢?我不能用这个(因为异常被捕获)

@Test(expected = InvalidParameterExeption.class) 
public void testIfFaultyDataPacketIsRecognised { 
    handleData(faultyDataPacket); 
} 

如何测试该InvalidParameterExeption抛出?

+0

要么你不应该捕捉异常,或者你应该删除@expected注释并找出资产的其他东西。打印堆栈跟踪不能很好地处理异常。事实上,你对于该做什么感到困惑,这暗示着你的班级的客户在有错误的数据包时感觉如何,他们不知道该怎么做。 – duffymo

+0

为'analyseData'而不是'handleData'编写一个测试。 – Thiefster

回答

3

你不会未抛出-_- 只是测试了“引发异常的方法”,而不是“异常捕获”一

@Test(expected = InvalidParameterExeption.class) 
public void testIfFaultyDataPacketIsRecognised() { 
    analyseData(faultyDataPacket); 
} 
+0

我已经做过这个测试了。但是我正在进行更高层次的抽象测试,并检查是否可以通过发送各种数据来使我的系统崩溃。这些测试实际上是双重检查,但没有必要。 –

+0

你是什么意思** throwins异常方法**? –

0

理想情况下,你应该捕捉并再次引发exception.But如果捕获异常你不想那么做那么为什么不按预期捕获测试用例中的异常呢?

@Test 
public void testIfFaultyDataPacketIsRecognised() { 
    try { 
     handleData(faultyDataPacket); 
     Assert.fail("Fail! Method was expected to throw an exception because faulty data packet was sent.") 
    } catch (InvalidParameterException e) { 
     // expected 
    } 
}