使用Junit测试抛出异常的方法

时间:2018-05-18 07:20:12

标签: java junit mockito

我正在尝试为基于某些逻辑抛出异常的方法编写测试用例。但是,测试用例失败,因为预期的异常和获得的异常是不同的。

测试方法 -

public void methodA (//parameters) throws ExceptionA
{
certainlogic=//call some method
if (certainlogic)
throw new ExceptionA(//exception details)
else
//code snippet
}

测试方法 -

    @Test (expected=ExceptionA.class)
    public void testMethodA
    {
    try
    {
    when (//mock method).thenReturn(true);
    //call methodA
    }
    catch (ExceptionA e)
    {
    fail(e.printStackTrace(e));
    }
    }

我收到以下错误 -

Unexpected exception, expected<cExceptionA> but was<java.lang.AssertionError>

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

您必须删除测试中的catch

@Test (expected=ExceptionA.class)
public void testMethod()
{
    when (//mock method).thenReturn(true);
    //call methodA
}

否则你抓住ExceptionA并通过调用fail抛出AssertionError。显然,AssertionError不是ExceptionA,因此您的测试失败。

答案 1 :(得分:0)

您应该完全删除try-catch块或至少删除catch。 “expected = ExceptionA.class”告诉junit监视抛出的异常,捕获它们并将它们的类与给定的类进行比较。 如果捕获抛出的异常,则@ Test-annotated junit方法无法检测是否抛出此类异常。 通过调用fail(...),您隐式抛出一个断言检测到的AssertionError,因此您的测试失败,因为AssertionError.class!= ExceptionA.class