2015-02-25 17 views
6

Salve sto cercando di così casi di test JUnit primavera ... e ho bisogno di mio contesto piena applicazione da caricare. Tuttavia, il test di junit non inizializza il contesto completo dell'applicazione. ClassePrimavera JUnit test non caricando pieno contesto di applicazione

prova:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
public class MongoDbRepositoryTest { 

    @Value("${spring.datasource.url}") 
    private String databaseUrl; 

    @Inject 
    private ApplicationContext appContext; 

    @Test 
    public void testCRUD() { 
     System.out.println("spring.datasource.url:" + databaseUrl); 
     showBeansIntialised(); 
     assertEquals(1, 1); 
    } 

    private void showBeansIntialised() { 
     System.out.println("BEEEAAANSSSS"); 
     for (String beanName : appContext.getBeanDefinitionNames()) { 
      System.out.println(beanName); 
     } 
    } 

uscita:

spring.datasource.url:${spring.datasource.url} 
BEEEAAANSSSS 
org.springframework.context.annotation.internalConfigurationAnnotationProcessor 
org.springframework.context.annotation.internalAutowiredAnnotationProcessor 
org.springframework.context.annotation.internalRequiredAnnotationProcessor 
org.springframework.context.annotation.internalCommonAnnotationProcessor 
org.springframework.context.annotation.internalPersistenceAnnotationProcessor 
org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor 
org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor 

Applicazione principale Classe NOTE:

@ComponentScan(basePackages = "com.test") 
@EnableAutoConfiguration(exclude = { MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class }) 
@EnableMongoRepositories("com.test.repository.mongodb") 
@EnableJpaRepositories("com.test.repository.jpa") 
@Profile(Constants.SPRING_PROFILE_DEVELOPMENT) 
public class Application { ... 

Quindi si deve eseguire la scansione di tutto il fagiolo di primavera nel pacchetto e TestCom caricarli anche nel contesto dell'applicazione per la prova di Junit. Ma dall'uscita dei fagioli initalised non sembra farlo.

+1

Per prima cosa, la classe di applicazione è attiva solo per un profilo che non si sta configurando per essere attivi nel test. – Steve

+0

Grazie Steve Noted. –

risposta

7

È necessario annotare la vostra classe di test con @ActiveProfiles come segue; in caso contrario, la classe di configurazione Application sarà sempre disabilitato. Ecco perché attualmente non vedi nessuno dei tuoi fagioli elencati nello ApplicationContext.

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@ActiveProfiles(Constants.SPRING_PROFILE_DEVELOPMENT) 
public class MongoDbRepositoryTest { /* ... */ } 

Inoltre, Application devono essere annotate con @Configuration come è stato detto da qualcun altro.

+0

Grazie Sam ... che ha risolto il mio problema! Grazie anche per i tuoi contributi a Spring Recipes .. è stata una delle mie prime risorse per imparare Spring! –

0

Ti manca forse un'annotazione @Configuration sulla tua classe Application?

+0

Anche dopo aver aggiunto @Configration al mio Application.class, non ha funzionato. –

+0

Dato che non ho potuto commentare, ho postato una risposta. Notato per riferimento futuro. – rikica

Problemi correlati