web-dev-qa-db-ja.com

SpringJUnitテストが完全なアプリケーションコンテキストをロードしない

こんにちは私はjunitテストケースを春にしようとしています...そして私は完全なアプリケーションコンテキストをロードする必要があります。ただし、junitテストは完全なアプリケーションコンテキストを初期化しません。

テストクラス:

@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);
        }
    }

出力:

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

主なアプリケーションクラスの注釈:

@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 { ...

したがって、パッケージcom.test内のすべてのSpring Beanをスキャンし、それらをJunitテストケースのapplicationcontextにロードする必要があります。しかし、初期化されたBeanの出力からは、これを行っていないようです。

10
Shivam Sinha

次のように、テストクラスに@ActiveProfilesで注釈を付ける必要があります。それ以外の場合、Application構成クラスは常にdisabledになります。そのため、現在、ApplicationContextにリストされている独自のBeanは表示されません。

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

さらに、他の誰かが言及したように、Applicationには@Configurationの注釈を付ける必要があります。

7
Sam Brannen

Applicationクラスに@Configurationアノテーションがない可能性がありますか?

0
rikica