需要测试一个函数抛出异常时。有两种方法写代码:
public void testXXX()
{
try
{
testClass.testMethod(param1);
}
catch (Exception e)
{
if (e instanceof Exception1)
{
return;
}
}
fail();
}
如上代码中,假设testClass.testMethod会抛出4种类型的异常。我们预测到传入param1给testClass.testMethod时,应该要抛出Exception1的异常。
此时,如果没有抛出这个异常而成功执行的话,那么就会走到fail();。如果抛出其他非Exception1的另外3种异常时,也会走到fail();这样的结果另我们非常满意。但是事实上并不完美,原因在于假设抛出了异于我们预计的那10种异常呢?如常见的NullPointerException。此时应该要抛出error,但是这样的写法永远不会有error的情况了。似乎这样写不是最好的方案。
稍微修改一下代码如下:
public void testYYYY()
{
try
{
testClass.testMethod(param1);
}
catch (Exception1 e)
{
return;
}
catch (Exception2 e)
{
// Not the expected exception
fail();
}
catch (Exception3 e)
{
// Not the expected exception
fail();
}
catch (Exception4 e)
{
// Not the expected exception
fail();
}
// No exception thrown
fail();
}