После исключения HashMap возвращает null в тесте Junit - PullRequest
0 голосов
/ 06 апреля 2020

В моем проекте, в классе DAO, в методе удаления, в качестве ответа на удаление я вернул HashMap. Я использовал JPA и Spring Boot. В Try-Catch, после успешного удаления, в карту в качестве ключа будет вставлен ключ «status», а в качестве строки значения «OK».

Как известно, в JPA, если сущность не найдена по первичному ключу, во время исключения исключения произойдет. После исключения в HasMap в качестве ключа «status» будет вставлено значение «FAIL».

Этот HashMap будет возвращен методом удаления DAO, и я намерен использовать его в JUnit для утверждения. Теперь проблема в том, что он работает для успешного удаления, но если я пытаюсь удалить объект, который не существует, назначение значения ключа работает в методе Dao, но когда я пытаюсь получить к нему доступ в тесте JUnit метод, он показывает ноль. Даже если я напечатал HasMap в методе удаления, он показывает его значение ключа, но в Junit, в то же время, показывает ноль.

Код модульного теста

@Test
    public void test3_delete() {
        id = getID();
        Map<String, String> response = new HashMap<>();
        try {
            response = dao_Profile_Basic_I.delete(id);
        } catch (Exception e) {
            System.out.println("Test Delete Fail!");
        }
        System.out.println("response (test) : " + response.toString());
        assertEquals("OK",response.get("status"));
    }

Корпус 1

@Override
    public Map<String, String> delete(String id) {
        System.out.println("DAO Delete: ");
        Map<String, String> response = new HashMap<>();
        String s = "";
        try {
            ProfileBasic profileBasic = entityManager.find(ProfileBasic.class, new Long(id));
            entityManager.remove(profileBasic);
            s = "OK";
        } catch (Exception e) {
            s = "FAIL";
            System.out.println("Profile Basic Delete Fail!");
//            e.printStackTrace();
        }
        response.put("status", s);
        System.out.println("response (dao) : "+ response.toString());
        return response;
    }

Выход

Profile Basic Delete Fail!
response (dao) : {status=FAIL}
Test Delete Fail!
response (test) : {}

Корпус 2

@Override
    public Map<String, String> delete(String id) {
        System.out.println("DAO Delete: ");
        Map<String, String> response = new HashMap<>();
        try {
            ProfileBasic profileBasic = entityManager.find(ProfileBasic.class, new Long(id));
            entityManager.remove(profileBasic);
            response.put("status","OK");
        } catch (Exception e) {
            System.out.println("Profile Basic Delete Fail!");
            response.put("status","FAIL");
//            e.printStackTrace();
        }
        System.out.println("response (dao) : "+ response.toString());
        return response;
    }

Выход

Profile Basic Delete Fail!
response (dao) : {status=FAIL}
Test Delete Fail!
response (test) : {}

Корпус 3

@Override
    public Map<String, String> delete(String id) {
        System.out.println("DAO Delete: ");
        Map<String, String> response = new HashMap<>();
        ProfileBasic profileBasic=null;
        try {
            profileBasic = entityManager.find(ProfileBasic.class, new Long(id));
            response.put("status", "OK");
        } catch (Exception e) {
            System.out.println("Profile Basic Delete Fail!");
            response.put("status", "FAIL");
//            e.printStackTrace();
        }
        entityManager.remove(profileBasic);
        System.out.println("response (dao) : " + response.toString());
        return response;
    }

Выход:

Profile Basic Delete Fail!
response (dao) : {status=FAIL}
Test Delete Fail!
response (test) : {}

Для успешного удаления, сообщение выглядит следующим образом:

    response (dao) : {status=OK}
    //hibernate sql show
    response (test) : {status=OK}

До сих пор, я мог понять, для исключения, означает, что при попытке удалить нулевую сущность назначение пары ключ-значение HasMap находится в Дао удалить метод, но возвращается к тестовому методу.

В чем может быть причина?

Полный код кода можно получить в GitHub: Часть в GitHub Это проект с открытым исходным кодом, вы можете внести свой вклад ,

1 Ответ

1 голос
/ 06 апреля 2020

Вы используете вложенный метод JPA (поиск и удаление). Метод find выдает исключение, если идентификатор равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...