Java Mockito抛出异常

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

我想为代码覆盖率抛出Db异常。如果我将预期异常设置为:
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));