2016-01-13 20 views
7

Utilizzo un'applicazione Spring Boot e l'auto cofiguration è abilitata. Il file dell'applicazione principale è contrassegnato come @EnableAutoConfiguration. L'origine dati viene cercata da JNDI è configurata utilizzando java config e la classe che crea l'origine dati è contrassegnata come @Configuration.Avvio a molla con origine dati durante il test

Ho una classe di test come di seguito.

@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
@ContextConfiguration(classes = Application.class) 
public class TestSomeBusiness {} 

il problema è quando si esegue il test case, la ricerca origine dati JNDI accade, che non riesce perché il caso di test non è in esecuzione all'interno di un ambiente server. Per quanto ne so, le classi in classpath contrassegnate con @Configuration vengono eseguite e il motivo per cui viene richiamata la ricerca dell'origine dati.

Il lavoro attorno al quale ho trovato è invece di cercare JNDI creare l'origine dati utilizzando DriverManagerDataSource, in modo che anche se non è un ambiente server, la ricerca dell'origine dati non avrà esito negativo.

Le mie domande sono:

1) Come ci trattano generalmente di origine dati (quando alzando lo sguardo dal JNDI) in applicazione di avvio primavera per il test?

2) Esiste un modo per escludere la chiamata alla classe di configurazione dell'origine dati durante l'esecuzione del test case?

3) Devo creare un server incorporato in modo che la ricerca JNDI possa essere eseguita durante l'esecuzione del test case?

risposta

6

2) Esiste un modo per escludere la chiamata alla classe di configurazione dell'origine dati durante l'esecuzione del test case?

È possibile aggiungere un file di configurazione nella vostra application.propertiessrc/test/resources e la primavera di avvio sarebbe raccogliere le configurazioni nelle ambienti di test. Suppongo, avete application.properties nel vostro src/main/resources come questo:

spring.datasource.jndi-name=some_jndi 

Questo JNDI risorsa verranno utilizzati nell'ambiente di produzione. Per l'ambiente di prova è possibile utilizzare una, ad esempio database MySQL, con l'aggiunta di queste configurazioni nella vostra prova application.properties:

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 

3) Devo creare un server incorporato in modo che la ricerca JNDI può essere fatto durante l'esecuzione test case?

Come già detto, è possibile ignorare completamente il fatto che si sta utilizzando JNDI per la produzione aggiungendo configurazioni specifiche di test.

1) Come ci trattano generalmente di origine dati (quando alzando lo sguardo dal JNDI) in applicazione di avvio di primavera per il test?

È possibile simulare le risorse JNDI utilizzando le strutture disponibili nel pacchetto org.springframework.mock.jndi.Ad esempio utilizzando SimpleNamingContextBuilder è possibile:

SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); 
builder.bind("jndi_name", dataSource); 
builder.activate(); 

L'altra opzione è, ovviamente, utilizzando Non JNDI risorse in ambienti di test.

Problemi correlati