6

У меня есть Maven проект из нескольких модулей с 2 ​​Spring загрузочных приложенийКак проверить несколько приложений Spring Boot в одном тесте?

родительскими

  • приложение Foo
  • barApp
  • тест

Как настроить тест, где вы можете загружать отдельные приложения загрузки пружин, каждый со своим собственным контекстом конфигурации, в том же процессе.

public abstract class AbstractIntegrationTest {//test module 

    protected FOO foo; 
    protected BAR bar; 

    @RunWith(SpringJUnit4ClassRunner.class) 
    @WebAppConfiguration 
    @IntegrationTest 
    @Transactional 
    @SpringApplicationConfiguration(classes = foo.Application.class) 
    public class FOO { 
     public MockMvc mockMvc; 

     @Autowired 
     public WebApplicationContext wac; 

     @Before 
     public void _0_setup() { 
      MockitoAnnotations.initMocks(this); 
      mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); 
      TestCase.assertNotNull(mockMvc); 
     } 

     public void login(String username) { 
     } 
    } 

    @RunWith(SpringJUnit4ClassRunner.class) 
    @WebAppConfiguration 
    @IntegrationTest 
    @Transactional 
    @SpringApplicationConfiguration(classes = bar.Application.class) 
    public class BAR { 

     @Autowired 
     public WebApplicationContext wac; 

     public MockMvc restMvc; 

     @Before 
     public void _0_setup() { 
      MockitoAnnotations.initMocks(this); 
      restMvc = MockMvcBuilders.webAppContextSetup(wac).build(); 
      TestCase.assertNotNull(restMvc); 
     } 

     public void login(String username) { 
     } 
    } 

    @Before 
    public void _0_setup() { 
     foo = new FOO(); 
     bar = new BAR(); 
    } 
} 

И пример интеграционного теста

public class IntegrationTest extends AbstractIntegrationTest { 

    @Test 
    public void login() { 
     foo.login("foologin"); 
     bar.login("barlogin"); 
    } 

} 
+0

Начиная с Spring Boot Test 1.5.0 вы можете [предположительно] (https://github.com/spring-projects/spring-boot/issues/8000) использовать '@ ContextConfiguration' с' @ SpringBootTest'. .. вы пытались использовать детские контексты? –

ответ

0

Учитывая два пакета com.foo.module1 и com.foo.module2 вы должны создать класс конфигурации каждого пакета. Например для Module1:

@SpringBootApplication public class Config1 {} 

Если вы хотите запустить приложение, используя только пружину бобов одного пакета, который вы можете сделать это с помощью SpringApplicationBuilder. Рабочий фрагмент:

new SpringApplicationBuilder(com.foo.module1.Config1.class) 
    .showBanner(false) 
    .run() 

Это будет загружаться Spring с Config1, который только ищет (@ComponentScan включен в @SpringBootApplication) в упаковке для бобов.

Если вы хотите запустить полное приложение, например. все два модуля сразу, вам нужно создать класс конфигурации в верхних пакетах com.foo.

В случае, о котором говорилось ниже, если запуск двух модулей в одном приложении может помешать друг другу нежелательным образом из-за библиотек, таких как запуск с пружинным запуском, я могу только думать о двух возможностях:

  1. Использование OSGi: Что не может решить эту проблему полностью, и может оказаться довольно сложной настройки или
  2. Нарезка приложение в двух приложений и создания интерфейсов. Spring Boot также является хорошим выбором для архитектуры Microservice.
+0

Если мои приложения с пружинной загрузкой находятся в разных модулях, как мне их получить в одном тесте? Мне пришлось бы использовать третий «интеграционный тестовый модуль», который знает оба приложения. Но потом я все время забираю все стартеры этих двух приложений в один путь к классам, которые могут иметь побочные эффекты (приложение «А» использует поведение приложения «В» только потому, теперь стартер с пружинными данными находится на пути). Как ты с этим справляешься? –

+0

Я адаптировал свой ответ на ваши вопросы. – rainerhahnekamp

+0

Да, я вижу. Но это мне не помогает. Конечно, я уже разделил свое «приложение» на «микросервисы». Вот почему я хочу интегрировать тест как с запущенными приложениями, так и с тем, что вызвало вопрос «как?» в первую очередь. –

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

  • Нет связанных вопросов^_^