2016-11-15 15 views
0
|--Integration tests 
    |--Spring boot rest application 

У меня есть два модуля, приложение загрузки Spring, где у меня есть конечные точки, он работает на своем собственном встроенный коте, я хочу, чтобы иметь возможность запускать его как часть Maven сборки интеграции Тестирования и запустить интеграцию тесты на нем.Как запустить приложение для загрузки весенних загрузок из другого модуля, например: в CI build через Maven?

Мой вопрос: есть ли способ запустить приложение загрузки весны из другого модуля через maven?

На веб-сайте Spring boot я могу увидеть пример запуска приложения весенней загрузки через свой собственный pom, используя плагин spring-boot-maven-plugin, но не запустив приложение как часть другого модуля, указав jar файл с исполнением.

ответ

0

Да, есть несколько способов сделать то, что вы просите, например:

  1. использовать @SpringBootTest аннотации на тестовые классах (с весной загрузка 1.4);
  2. программно запускает приложение 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); 
    }