junit测试中的异常情况测试

需要测试一个函数抛出异常时。有两种方法写代码:
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();
       
       
    }

By Lu Jun

80后男,就职于软件行业。习于F*** GFW。人生48%时间陪同电子设备和互联网,美剧迷,高清视频狂热者,游戏菜鸟,长期谷粉,临时果粉,略知摄影。

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.