Да, есть несколько способов сделать то, что вы просите, например:
- использовать
@SpringBootTest
аннотации на тестовые классах (с весной загрузка 1.4);
- программно запускает приложение Spring Boot из вашего теста.
Первый - мой любимый и простой, но он работает только в контексте модульных тестов, конечно. Вот пример.
Предположим, что у вас есть класс с именем Application
, аннотированный @SpringBootApplication
в вашем модуле REST. Вы можете протестировать конечные точки, просто определив тест, как это внутри тестового модуля интеграции:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class, properties = {"my.overriden.property=true"})
public class RestEndpointTest
{
// ...
}
Поступая таким образом, весь контекст приложения запустится. Затем вы можете настроить свой тест в зависимости от ваших потребностей, а также переопределить некоторые свойства (см. my.overridden.property
).
В качестве альтернативы, вы можете определить свою собственную конфигурацию внутри тестового модуля, ссылки на любой необходимый класс от другого модуля, например:
@Configuration
@ComponentScan(basePackageClasses = {BaseClass.class})
@EnableJpaRepositories
@EntityScan
@EnableAutoConfiguration
public class SupportConfiguration
{
@Bean
public ARequiredBean bean()
{
return new ARequiredBean();
}
// etc...
}
и использовать его так же, как вы могли бы сделать с любым другим контекстом:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SupportConfiguration.class)
public class CustomTest
{
// ...
}
другой метод будет программно запустить экземпляр приложения REST, с чем-то вроде этого:
public static void main(String[] args) throws IOException
{
try (ConfigurableApplicationContext context = SpringApplication.run(Application.class, args))
{
log.info("Server Started. Press <Enter> to shutdown...");
context.registerShutdownHook();
BufferedReader inReader = new BufferedReader(new InputStreamReader(System.in));
inReader.readLine();
log.info("Closing application context...");
context.stop();
}
log.info("Context closed, shutting down. Bye.");
System.exit(0);
}