Come faccio a importare classi di configurazione in un @DataJpaTest in un SpringBootTest?

Ho un SpringBoot Applicazione e ho una config pacchetto con

@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}

Ma il PersistenceConfig non ottenere raccolti in un PersonRepositoryTest

@RunWith( SpringRunner.class )
@DataJpaTest
public class PersonRepositoryTest {

    //Tests ...
}

Tuttavia, se cambio da @DataJpaTest to @SpringBootTest, PersonRepositoryTest pick up il config.

Mio struttura del pacchetto è

- main
    - java
        - config
              PersistenceConfig.java
        - domain
              Person.java
        - persistence
              PersonRepository.java
          Application.java //@SpringBootApplication

- test
    - java
        - persistence
              PersonRepositoryTest.java

Il Test miglioramenti nella Primavera del Boot 1.4 suggeriscono per testare il livello di persistenza con @DataJpaTest

Osservazione:
Fare due annotazioni sulla classe di Test ancora non importare il file config
@SpringBootTest
@DataJpaTest

Domanda 1:
Durante il test il Livello di Persistenza con @DataJpaTest
come faccio a correttamente (buona pratica il modo in Primavera Boot) importare il file config pacchetto nel mio Test?

Domanda 2:
Può essere un accettabile aggirare usando @SpringBootTest? Sono consapevole del fatto che @DataJpaTest è anche una meta di annotazione, con sensibili configurazione automatica per il mio database tra cui la gestione delle transazioni. Ma cosa succede Se io non ne ho bisogno?

InformationsquelleAutor Dachstein | 2017-04-30



3 Replies
  1. 13

    Una soluzione è quella di utilizzare @Import per importare la configurazione per la configurazione fatta da @DataJpaTest. Questa è la mia comprensione di @Import.

    @RunWith(SpringRunner.class)
    @DataJpaTest
    @Import(AuditConfiguration.class)
    public class AuditTest {
    }

    con AuditConfiguration che consente il controllo

    @Configuration
    @EnableJpaAuditing
    public class AuditConfiguration {
    }
    • Questa soluzione è superiore in quanto è a grana fine e non fare il contrario di ciò che la fetta esprime.
  2. 5

    Si può provare questo:
    annotare PersistenceConfig con @ComponentScan per attivare il componente di scansione in Primavera.

    @Configuration
    @EnableJpaAuditing
    @ComponentScan(basePackages = "com.yourbasepackage")
    public class PersistenceConfig {
    }

    Senza ulteriori configurazioni, @ComponentScan di default per eseguire la scansione dello stesso pacchetto come PersistenceConfig classe.

    E aggiungere il @Context-Configuration annotazione dirgli di caricare la configurazione da PersistenceConfig.class.

    @RunWith( SpringRunner.class )
    @DataJpaTest
    @ContextConfiguration(classes=PersistenceConfig.class)
    public class PersonRepositoryTest {
    
        //Tests ...
    }
    • evviva! funziona. Così, quando ho più config classi nel file di configurazione del pacchetto, tutti loro saranno automaticamente preso perché ho aggiunto @ComponentScan di one di loro in questo pacchetto?
    • Inoltre, perché funziona con il SpringBootTest annotazione, fuori dalla scatola? Non c’è ComponentScan annotazione qualsiasi bisogno.
    • Non so ma io suggeste a leggere la Primavera in azione 4a edizione capitolo 2.2 Automaticamente cablaggio fagioli. È inoltre possibile leggere il capitolo 4 di Primavera di Avvio in Azione.
    • Va bene sarà ottenere questo libro. Grazie Giorgio!
  3. -1

    Dopo la @georges van post ho scoperto che TUTTE le classi di configurazione ottenere anche preso da solo l’aggiunta di una riga del test:

    @RunWith( SpringRunner.class )
    @DataJpaTest
    @ComponentScan(basePackages = "com.basepackage.config")
    public class PersonRepositoryTest {
    
        //Tests ...
    }

    Se qualcuno vuole solo UNA specifica classe di configurazione si può fare:

    @RunWith( SpringRunner.class )
    @DataJpaTest
    @ContextConfiguration(classes=MyConfig.class)
    public class PersonRepositoryTest {
    
        //Tests ...
    }

    O più classi con:

    @ContextConfiguration(classes={MyConfig1.class, MyConfig2.class})

    • Potreste essere attenti come un DataJpaTest è una fetta di scansione di tutte le configurazioni possono introdurre imprevisti dipendenze richieste se Consente @Enablething con la configurazione. Questo è il motivo per cui si dovrebbe evitare di mettere @Enable sulla classe di applicazione o di inserirli in un grande configurazione.

Lascia un commento