[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation

Je pense que personne ne ferait cela, mais j'ai tellement souffert que je vais en prendre note.

À propos de la notation de cette phrase

: grin: 1.4: Comment faire dans le cas de 1.4. : smirk: 1.2: 1.2 est comment faire.

Relation de mise en œuvre

@EntityScan

:grin: 1.4: org.springframework.boot.autoconfigure.domain.EntityScan :smirk: 1.2: org.springframework.boot.orm.jpa.EntityScan

DI

: grin: 1.4: Si cela va de soi, DI se fera sans ajouter @ Autowired. : sourire narquois: 1.2: Ajoutons @ Autowired.

Test lié

Testeur

:grin: 1.4: @RunWith(SpringRunner.class) :smirk: 1.2: @RunWith(SpringJUnit4ClassRunner.class)

Tester avec Spring

: grin: 1.4: Ajouter @ SpringBootTest : sourire narquois: 1.2: Ajouter @SpringApplicationConfiguration (classes = classes d'application)

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/SpringApplicationConfiguration.html

Test d'intégration de base de données

: grin: 1.4: Ajoutez @ DataJpaTest à la classe de test. : sourire narquois: 1.2: C'est dur.

@ DataJpaTest semble faire cela.

  1. Configurer la base de données en mémoire
  2. Définissez Hibernate / Spring Data / Datasource
  3. Exécutez @ EntityScan
  4. Activez la journalisation SQL

Je pensais que je devais tout faire, mais il semble que ce n'est pas grave si je fais tout cela.

  1. Créez une classe de contexte d'application avec @ EntityScan et @ EnableJpaRepositories.
  2. Créez une classe TestEntityManager (à partir de 1.4)
  3. Créez un bean qui renvoie TestEntityManager (à partir de 1.4)
  4. Ajoutez @ Transactional et @ SpringApplicationConfiguration à la classe de test.

Je vais le faire dans l'ordre.

Créer une classe de contexte d'application avec @ EntityScan, @ EnableJpaRepositories

TestApplication.java


@SpringBootApplication
@EnableJpaRepositories(Emplacement de la classe de référentiel)
@EntityScan(Emplacement de la classe d'entité)
@EnableJpaAuditing //Ce n'est pas pertinent cette fois
public class TestApplication {

}

Créer la classe TestEntityManager (à partir de 1.4)

La source originale est ici. https://github.com/spring-projects/spring-boot/blob/master/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/orm/jpa/

TestEntityManager.java


public class TestEntityManager {

    private final EntityManagerFactory entityManagerFactory;

    public TestEntityManager(EntityManagerFactory entityManagerFactory) {
        Assert.notNull(entityManagerFactory, "EntityManagerFactory must not be null");
        this.entityManagerFactory = entityManagerFactory;
    }

    public <E> E persist(E entity) {
        getEntityManager().persist(entity);
        return entity;
    }

    public void flush() {
        getEntityManager().flush();
    }

    public <E> E persistAndFlush(E entity) {
        persist(entity);
        flush();
        return entity;
    }

    public void detach(Object entity) {
        getEntityManager().detach(entity);
    }

    public <E> E find(Class<E> entityClass, Object primaryKey) {
        return getEntityManager().find(entityClass, primaryKey);
    }

    public final EntityManager getEntityManager() {
        EntityManager manager = EntityManagerFactoryUtils
                .getTransactionalEntityManager(this.entityManagerFactory);
        Assert.state(manager != null, "No transactional EntityManager found");
        return manager;
    }
}

Créez un bean qui renvoie TestEntityManager (à partir de 1.4)

TestEntityManagerConfigure.java


@Configuration
@AutoConfigureAfter(HibernateJpaAutoConfiguration.class)
public class TestEntityManagerConfigure {

    @Bean
    @ConditionalOnMissingBean
    public TestEntityManager testEntityManager(
            EntityManagerFactory entityManagerFactory) {
        return new TestEntityManager(entityManagerFactory);
    }

}

Ajoutez @ Transactional et @ SpringApplicationConfiguration à la classe de test

MySomeRepositoryTest.java


import org.springframework.transaction.annotation.Transactional;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestApplication.class)
@Transactional
public class MySomeRepositoryTest {

    @Autowired
    private MySomeRepository instance;

    @Autowired
    private TestEntityManager em;

    @Test
    public void testSomeMethod {
     // ...
    }

}


Injecter une instance simulée

: grin: 1.4: Ajoutez @ MockBean à la variable d'instance que vous voulez simuler : smirk: 1.2: Définissez @ Bean qui renvoie une instance simulée et ajoutez @ Primary

Pour 1.4

MySomeTest.java


    @MockBean
    private MyTargetClass mock;

Pour 1.2

@Profile est ajouté afin que seule une classe @Configuration spécifique soit valide.

MySomeTest.java


@ActiveProfiles("MySomeTest")
public class MySomeTest {
    @Autowired
    private MyTargetClass mock;
}

MySomeTestConfig.java


@Configuration
@Profile("MySomeTest")
public class MySomeTestConfig {
    @Bean
    @Primary
    public MyTargetClass myTargetClass() {
        return Mockito.mock(MyTargetClass.class);
    }
}

Le voyage continue. .. ..

Si vous trouvez quelque chose, je l'ajouterai.

Recommended Posts

[Java] [Spring] Spring Boot 1.4-> 1.2 Note de rétrogradation
[Java] Thymeleaf Basic (Spring Boot)
Application Java CICS-Run - (4) Application Spring Boot
Spring Java
Elastic Beanstalk (Java) + Spring Boot + https
[Java] Intégration LINE avec Spring Boot
[Java] [Spring] Spring Boot Mystérieux hamarinet d'injection de dépendances
Défi Spring Boot
Créer un projet Java Spring Boot avec IntelliJ
Construction de l'environnement de développement Java Spring Boot + Docker
Rétrograder Java MacOS
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
[Java] Spring DI ③
Conseils Java - Créez un projet Spring Boot avec Gradle
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Procédure de construction de LINE Bot x Java (Spring Boot)
Modificateur abstrait Java [Note]
[Java] Notes de l'itérateur interne
Rédaction de mémo de démarrage de printemps (1)
Mémo Spring Cloud Netflix
Première botte à ressort (DI)
Fiche d'apprentissage SPRING BOOT 02
Aide-mémoire Spring Boot2
Gestion des exceptions Spring Boot
[java] Java SE 8 Silver Note
Mappage du servlet Spring Boot
Environnement de développement-développement Spring Boot-
[Note] Java: recherche de chaînes de caractères
[Note] Java: enquête sur les chaînes de caractères
Apprentissage de Spring Boot [Début]
Rédaction de mémos de démarrage de printemps (2)
Résumé du document Spring Boot 2.2
Ma note d'étude (Java)
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Disponibilité de l'application Spring Boot 2.3
Tutoriels Spring Boot Sujets
Télécharger avec Spring Boot
java: Ajouter une date [Note]
[Note] Fichier de configuration lors de l'utilisation de Logback avec Spring Boot
Veuillez noter que Spring Boot + Tomcat 8.5.8 ne peut pas être utilisé!
[Java] [Spring Boot] Spécifier le profil d'exécution --Spring Boot à partir de NetBeans
Remarques sur Java GC
[Spring Boot] Construction de l'environnement (macOS)
[Java / Kotlin] Traitement d'échappement (désinfection) pour HTML5 avec unbescape [Spring Boot]
Définir le paramètre contextuel dans Spring Boot
Essayez Spring Boot de 0 à 100.
Générer un code à barres avec Spring Boot
Spring Boot sur Microsoft Azure
Implémenter GraphQL avec Spring Boot
Rétrograder Java sur openSUSE Linux
Spring + Gradle + Java Quick Start
Gérez l'API de date et d'heure Java 8 avec Thymeleaf avec Spring Boot
(Remarque) Classes / variables / méthodes Java