Java Mockito抛出异常
我想为代码覆盖率抛出Db异常。如果我将预期异常设置为:Java Mockito抛出异常,java,exception,spring-mvc,testng,mockito,Java,Exception,Spring Mvc,Testng,Mockito,我想为代码覆盖率抛出Db异常。如果我将预期异常设置为:exception.class,而不是DataAccessException.class 我在原始类中的方法如下: @Test(expectedExceptions=DataAccessException.class) public void testUpdateSubModuleOrderDateExceptionCheck() { //some code to initialize// UserSubModuleDao u
exception.class
,而不是DataAccessException.class
我在原始类中的方法如下:
@Test(expectedExceptions=DataAccessException.class)
public void testUpdateSubModuleOrderDateExceptionCheck() {
//some code to initialize//
UserSubModuleDao userSubModuleDao = mock(UserSubModuleDao.class);
userModuleServiceImpl.setUserSubModuleDao(userSubModuleDao);
UserSubModule userSubModule=new UserSubModule();
UserSubModuleId userSubModuleId=new UserSubModuleId();
when(userSubModuleDao.findById(any(UserSubModuleId.class),eq(false))).thenThrow(DataAccessException.class);
userModuleServiceImpl.updateSubModuleOrder(data, moduleSysId, userId);
和一些错误行。。。。
测试运行:1,失败:1,跳过:0
===============================================
=======================================================更改此项:
Default test
到
例如:
thenThrow(new DataAccessException("..."){ })
只有当异常类型具有无参数构造函数,而Spring异常没有参数构造函数时,才能传递类引用。请重试
when(userSubModuleDao.findById(any(UserSubModuleId.class),eq(false))).thenThrow(new DataAccessException("..."){});
如Jen S所述:
只有当异常类型具有无参数构造函数,而Spring异常没有参数构造函数时,才能传递类引用
我的解决方案是使用Mockito:
Mockito.doThrow(new Exception()).when(mockedObject).methodName(...);
它说DataAccessException不能实例化,它说该类不能实例化,因为它试图使用无参数构造函数来实现它。而且这个类没有这样的构造函数。
DataAccessException
是一个抽象类,所以不能实例化它。您可以使用newdataretrievalfailureexception(“原因”)
insteadit仍在给出错误…”java.lang.AssertionError:Expected exception:org.springframework.dao.DataAccessException“…即使我使用了'newdataaccessexception(“…”){}对我有效,+1,但那是什么{}做什么?当您的类显式捕获DataAccessException
并将其转换为其他内容时,为什么您希望出现DataAccessException
?这是一个更正确的答案,因为当…thenThrow与返回void的方法不起作用。@SaurabhPatil-如何解决void方法抛出的问题异常?@PAA您的意思是说您希望void方法在测试期间抛出异常吗?是的,这就是为什么这个答案比另一个好的原因。
thenThrow(new DataAccessException("..."){ })
when(userSubModuleDao.findById(any(UserSubModuleId.class),eq(false))).thenThrow(new DataAccessException("..."){});
Mockito.doThrow(new Exception()).when(mockedObject).methodName(...);
Mockito.when(mockedObject.method(Mockito.anyString())).thenThrow(Mockito.mock(DataAccessException.class));