В моем проекте 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 внутренней класс. Этого я хочу избежать.
Я добавил код, чтобы объяснить проблему лучше. –