web-dev-qa-db-fra.com

Exception de jet Mockito

@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);

Je veux lever l'exception Db pour la couverture du code. son fonctionnement si je donne l'exception attendue comme: Exception.class mais pas pour DataAccessException.class

Ma méthode dans la classe d'origine est la suivante:

public void updateSubModuleOrder(Long[] data, Long moduleSysId, Long userId) {
    try {

        for (int i = 0; i < data.length; i++) {
            SubModule subModule=new SubModule();
            subModule.setSubModuleId(data[i]);
            UserSubModuleId userSubModuleId = new UserSubModuleId();
            userSubModuleId.setSubModuleId(subModule);
            userSubModuleId.setUserId(userId);
            userSubModuleId.setUserModuleId(moduleSysId);
            UserSubModule userSubmodule = new UserSubModule();
            userSubmodule = userSubModuleDao.findById(userSubModuleId,
                    false);
catch (DataAccessException ewmsDataExp) {
        LOGGER.error(
                "Database Exception while updateSubModuleOrder because of {}",
                ewmsDataExp.getMessage());
        throw new EWMSServiceException(
                "Database Exception while updateSubModuleOrder"
                        + ewmsDataExp.getMessage());
    } catch (Exception exp) {
        LOGGER.error(
                "System Exception while updateSubModuleOrder because of {}",
                exp.getMessage());
        throw new EWMSServiceException(
                "Database Exception while updateSubModuleOrder"
                        + exp.getMessage());
    }*

j'ai l'erreur

FAILED: testUpdateSubModuleOrderDateExceptionCheck
org.testng.TestException: 
**Expected exception org.springframework.dao.DataAccessException but got    org.testng.TestException:** 
**Expected exception org.springframework.dao.DataAccessException but got         Java.lang.InstantiationError: org.springframework.dao.DataAccessException**
    at org.testng.internal.Invoker.handleInvocationResults(Invoker.Java:1497)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.Java:1245)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.Java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.Java:111)
at org.testng.TestRunner.privateRun(TestRunner.Java:767)
at org.testng.TestRunner.run(TestRunner.Java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.Java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.Java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.Java:291)
at org.testng.SuiteRunner.run(SuiteRunner.Java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.Java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.Java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.Java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.Java:1149)
at org.testng.TestNG.run(TestNG.Java:1057)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.Java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.Java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.Java:175)

et quelques lignes d'erreur. ...

Default test

Tests exécutés: 1, échecs: 1, sauts: 0

================================================

================================================

18
user2375298

Change ça:

thenThrow(DataAccessException.class)

à

thenThrow(new DataAccessException("..."){ })

Exemple:

when(userSubModuleDao.findById(any(UserSubModuleId.class),eq(false))).thenThrow(new DataAccessException("..."){});

Vous ne pouvez transmettre une référence de classe que lorsque ce type d'exception a un constructeur No-Arg et que l'exception Spring n'en a pas.

39
Jen S.

Essayer

Mockito.doThrow(new Exception()).when(mockedObject).methodName(...);
17
Shyam_coder