使用 Junit 测试引发异常的方法



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

测试方法 -

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>

如何解决此问题?

您必须删除测试中的catch

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

否则,您将捕获ExceptionA并通过调用fail抛出断言错误。显然,AssertionError不是ExceptionA,因此您的测试失败。

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

相关内容

  • 没有找到相关文章

最新更新