Java 测试使用Junit引发异常的方法
我正试图为一个方法编写一个测试用例,该方法基于特定的逻辑抛出一个异常。但是,测试用例失败,因为预期异常和获得的异常不同 测试方法-Java 测试使用Junit引发异常的方法,java,junit,mockito,Java,Junit,Mockito,我正试图为一个方法编写一个测试用例,该方法基于特定的逻辑抛出一个异常。但是,测试用例失败,因为预期异常和获得的异常不同 测试方法- public void methodA (//parameters) throws ExceptionA { certainlogic=//call some method if (certainlogic) throw new ExceptionA(//exception details) else //code snippet } 试验方法- @Tes
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>
意外异常,应为,但为
如何解决此问题?您必须删除测试中的
捕获项
@Test (expected=ExceptionA.class)
public void testMethod()
{
when (//mock method).thenReturn(true);
//call methodA
}
否则,您将捕获异常a
,并通过调用fail
抛出断言错误。显然,AssertionError
不是例外,因此测试失败。您应该完全删除try-catch块,或者至少删除catch。
“expected=ExceptionA.class”告诉junit监视抛出的异常,捕获它们并将它们的类与给定的类进行比较。
如果捕获抛出的异常,@Test注释的junit方法无法检测是否抛出了此类异常。
通过调用fail(…),您隐式抛出junit检测到的AssertionError,因此您的测试失败,因为AssertionError.class!=异常类共享更多代码,尤其是测试类的代码。我认为您正在检查catch或finally块中的断言。您在测试方法中断言了什么吗?显示实际代码。您声明发生了断言错误,但显示的代码中没有任何断言。因此,要么没有引发异常,要么在调用引发ExceptionRemove预期异常的方法之前,断言失败。现在,您仍然应该从某个assert中获取AssertionError。您将在堆栈跟踪中看到它,可以调试junit测试等等。在eclipse中,需要为失败的测试单击junit树视图。@Arnab捕获异常。你不应该。那是你的问题