Есть ли способы создать пример постоянного объекта с учетом его класса или типа? - PullRequest
0 голосов
/ 14 июня 2019

Я использую Hibernate Envers для аудита изменений сущностей, и в нашем проекте есть много проверенных сущностей Hibernate.Поэтому я хочу написать тест, который для каждой сущности сделал следующее: 1) создает пример объекта с учетом его класса.2) сохраняет этот объект в базе данных, используя менеджер объектов3) проверяет, создана ли соответствующая запись аудита или нет.

Основная проблема с первым шагом, и я ищу идеи о том, как она может быть реализована в общем виде?

Я пыталсязаполнить основные поля, используя отражение, но некоторые объекты не могут быть сохранены из-за различных ошибок гибернации - например, внешний ключ не существует, или не пустое поле не заполнено, или ID должен быть предопределен и т. д.

Поэтому я хотел бы получить что-то подобное

    for (aClass in auditedClasses) {
        val example = createFilledEntityGivenItsClass(aClass)
        entityManager.persist(example)
        val pk = entityManager.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(entity) // extracting primary key from entity.
        classToPKMap.put(aClass,  pk)
    }
    ....
    // using Envers to search for audit records.
    ....

Так что самое сложное - реализовать этот метод createFilledEntityGivenItsClass.

Вариант использования: Некоторые разработчики добавилиновый тип сущности, помеченный как @Audited и ожидает, что все работает.Он хотел использовать свою функцию, но тест не прошел и сказал ему: «Ваша сущность на самом деле не проверена по какой-то причине. Пожалуйста, изучите проблему»

Есть идеи?Совет?

1 Ответ

1 голос
/ 24 июня 2019

Эти нюансы часто обусловлены особенностями, и попытка написать общее решение, учитывающее все эти очень специфические нюансы, будет проблемной, если не ошибаться.Разумеется, разработчики, внедряющие новые сущности и функции в приложение, должны писать свои собственные модульные и интеграционные тесты и добавлять их в набор тестов приложения.

Я бы предложил вам сделать шаг назад и предоставить разработчикам средства для проверки успешности операции аудита с помощью вспомогательного класса с помощью различных методов, которые абстрагируют объекты Envers и требуют лишь наличия у нихбазовое понимание того, как работает система аудита.

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