2015-12-23 3 views
2

В моем проекте Spring Boot у меня есть основной класс, аннотированный @SpringBootConfiguration. У меня также есть некоторые модульные тесты, которые используют @SpringApplicationConfiguration, который указывает на внутренний класс, который определяет контекст Spring для использования в моем модульном тесте (используя некоторые из них).Лучший способ исключить модульный тест @ Конфигурации весной?

Теперь я хочу написать интеграционный тест, который начнет полный контекст моего приложения. Однако это не работает, поскольку оно также подбирает контексты Spring, которые определяются как внутренние классы в других модульных тестах.

Что было бы лучшим способом избежать этого? Я видел exclude и excludeName свойства на @SpringBootConfiguration, но я не уверен, как их использовать.

UPDATE:

Некоторый код, чтобы объяснить проблему больше:

Мой главный класс:

package com.company.myapp; 

@SpringBootApplication 
@EnableJpaRepositories 
@EnableTransactionManagement 
@EntityScan(basePackageClasses = {MyApplication.class, Jsr310JpaConverters.class}) 
public class MyApplication { 
    public static void main(String[] args) { 
    SpringApplication.run(MyApplication.class, args); 
    } 
} 

У меня есть модульный тест для Spring REST Docs:

package com.company.myapp.controller 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration 
@WebAppConfiguration 
public class SomeControllerDocumentation { 

@Rule 
public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); 

    // Some test methods here 


    // Inner class that defines the context for the unit test 
    public static class TestConfiguration { 
    @Bean 
    public SomeController someController() { return new SomeController(); } 

    @Bean 
    public SomeService someService() { return new SomeServiceImpl(); } 

    @Bean 
    public SomeRepository someRepository() { return mock(SomeRepository.class); 
} 

Поэтому в модульном тесте используется контекст, определенный во внутреннем классе. Теперь я хочу другой тест, который проверяет, если «нормальный» контекст приложения приложения запускается:

package com.company.myapp; 

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(MyApplication.class) 
@WebAppConfiguration 
public class MyApplicationTest { 

    @Autowired 
    private ApplicationContext applicationContext; 

    @Test 
    public void whenApplicationStarts_thenContextIsInitialized() { 
     assertThat(applicationContext).isNotNull(); 
    } 

} 

Этот тест будет теперь не только провода вещи он должен, но и бобы из SomeControllerDocumentation.TestConfiguration внутренней класс. Этого я хочу избежать.

ответ

-1

Я думаю, что вы говорите о @Ignore

2

Вы можете использовать профили: аннотировать соответствующие конфигурации фасоль с @Profile("unit-test") и @Profile("integration-test") и внутри тестов указать, какой профиль должен быть активным с помощью @ActiveProfiles.

Однако, похоже, что вы можете вообще избежать проблемы, просто перестроив конфигурационную структуру. Однако трудно предположить что-либо, не видя никакого кода.

+0

Я добавил код, чтобы объяснить проблему лучше. –

1

С весной Ботинками 1.4, проблема может быть решена путем аннотирования конфигурации в модульных тестах с @TestConfiguration

Смежные вопросы