Среда Spring Integration Testing не отправляет событие жизненного цикла сущности JPA - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть простой проект Spring со встроенной в память базой данных. У меня есть простой метод сохранения жизненного цикла, который просто вызывает print. Когда я запускаю приложение, оно корректно регистрируется, когда я запускаю тестирование, но это не так. Как сделать так, чтобы тестовая среда вызывала метод обратного вызова жизненного цикла? Мне нужно знать, как это сделать, потому что я собираюсь выполнить интеграционный тест с методом обратного вызова жизненного цикла.

Здесь записываются журналы, когда я запускаю ./gradlew bootRun

...
2020-04-19 22:04:14.532  INFO 24183 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-04-19 22:04:14.765  INFO 24183 --- [           main] c.flama.lifecycle.LifecycleApplication   : Started LifecycleApplication in 1.885 seconds (JVM running for 2.218)
INSIDE CRAZY METHOD
PRINTING ENTITIES
1
2020-04-19 22:04:14.877  INFO 24183 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
...

, а здесь логи при запуске ./gradlew test

> Task :test
2020-04-19 22:04:07.308  INFO 24076 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-04-19 22:04:07.308  INFO 24076 --- [extShutdownHook] .SchemaDropperImpl$DelayedDropActionImpl : HHH000477: Starting delayed evictData of schema as part of SessionFactory shut-down'
2020-04-19 22:04:07.312  INFO 24076 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-04-19 22:04:07.319  INFO 24076 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

BUILD SUCCESSFUL in 5s
4 actionable tasks: 2 executed, 2 up-to-date

Здесь build.gradle:

plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'com.flama'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly 'com.h2database:h2'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

Это мой основной класс:

package com.flama.lifecycle;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.flama.lifecycle.repository.SillyRepository;
import com.flama.lifecycle.domain.SillyEntity;

@SpringBootApplication
public class LifecycleApplication {

    public static void main(String[] args) {
        ApplicationContext context = (ApplicationContext)SpringApplication.run(LifecycleApplication.class, args);
        SillyRepository repository = (SillyRepository) context.getBean("sillyRepository");
        repository.saveAndFlush(new SillyEntity());
        System.out.println("PRINTING ENTITIES");
        for (SillyEntity entity: repository.findAll()){
            System.out.println(entity.getId());
        }
    }

}

Класс домена:

package com.flama.lifecycle.domain;

import javax.persistence.*;

@Entity
@Table(name = "silly")
public class SillyEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    public Long getId(){
        return id;
    }

    @PostPersist
    public void crazyMethod(){
        System.out.println("INSIDE CRAZY METHOD");
    }

}

Класс хранилища:

package com.flama.lifecycle.repository;

import org.springframework.stereotype.Repository;
import com.flama.lifecycle.domain.SillyEntity;
import org.springframework.data.jpa.repository.*;

@Repository
public interface SillyRepository extends JpaRepository<SillyEntity, Long>{
}

Тестовый класс:

package com.flama.lifecycle;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.beans.factory.annotation.Autowired;
import com.flama.lifecycle.domain.SillyEntity;
import com.flama.lifecycle.repository.SillyRepository;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest
class LifecycleApplicationTests {

    @Autowired
    private SillyRepository repository;

    @Test
    void contextLoads() {
    }

    @Test
    void createSillyEntity(){
        SillyEntity entity = new SillyEntity();
        int sizeBefore = repository.findAll().size();
        repository.saveAndFlush(entity);
        assertThat(repository.findAll().size()).isEqualTo(sizeBefore + 1);
    }

}

1 Ответ

0 голосов
/ 20 апреля 2020

Является ли ваша IDE Intelij IDEA? Это может быть печать сообщений, записанных System.out.println на другую вкладку в отладке. Попробуйте напечатать ваши сообщения через регистратор по умолчанию. Вы будете удивлены, ?

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