单元测试应如何处理预期和意外的异常?

Vic*_*tor 5 java junit unit-testing

它应该在预期的异常发生时通过测试吗?如果出现意外异常,它是否应该通过测试?处理异常是多余的,因为它将无法通过测试,因此可以作为测试吗?

Fed*_*zza 11

测试预期的例外情况

您必须添加expected具有预期异常的属性,因此如果抛出指定的异常,测试将通过.否则,它将失败.

例如:

@Test(expected=NullPointerException.class)
public void cannotConvertNulls() {
    service.convert(null);
}
Run Code Online (Sandbox Code Playgroud)

要么...

@Test(expected = ArithmeticException.class)  
public void divisionWithException() {  
    int i = 1/0;
}
Run Code Online (Sandbox Code Playgroud)

文件说:

Test annotation支持两个可选参数.第一个是预期的,声明测试方法应该抛出异常.如果它不抛出异常或抛出与声明的异常不同的异常,则测试失败.

测试时间

只是为了让您知道,您还可以测试超时.

第二个可选参数timeout会在测试时间超过指定的时钟时间(以毫秒为单位)时导致测试失败.以下测试失败:

@Test(timeout=100) 
public void infinity() {
   while(true);
}
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助