Пропустить методы жизненного цикла JPA при выполнении тестов - PullRequest
3 голосов
/ 19 февраля 2020

У меня есть сущность Post, и слушатель события зарегистрирован в ней, как показано здесь.

@EntityListeners({EntityAuditor.class})
@Entity 
class Post {
  ...
}

Вот как выглядит мой класс слушателя EntityAuditor:

public class EntityAuditor {
  @PostPersist
  void publishToKafka(Object object) {
      // publish new object to Kafka
  }
}

Надеюсь не хочу, чтобы это вызывалось, когда мой юнит / интеграционный тест пытается создать новый пост. Есть ли способ, которым я могу пропустить перехватчики жизненного цикла JPA или прослушиватель событий только для тестов?

1 Ответ

2 голосов
/ 19 февраля 2020

Согласно JPA spe c Аннотация EntityListeners может быть переопределена с помощью подэлемента <entity-listeners> элемента <entity> в файле постоянных объектов / файла реляционного отображения.

Итак, вам следует включите файл META-INF / orm. xml, только в вашей тестовой среде и установите пустой <entity-listeners> для вашей сущности. Как то так

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd"
                 version="2.2">
    <entity class="yourpackage.Post">
        <entity-listeners />
    </entity>
</entity-mappings>
...