6

tôi có một dự án Maven đa mô-đun với 2 ứng dụng xuân BootLàm cách nào để kiểm tra nhiều ứng dụng Khởi động trong một thử nghiệm?

mẹ

  • fooApp
  • barApp
  • kiểm tra

Làm thế nào để thiết lập một thử nghiệm nơi bạn có thể tải các ứng dụng khởi động mùa xuân riêng biệt, mỗi ứng dụng có bối cảnh cấu hình riêng, trong cùng một quá trình.

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(); 
    } 
} 

Và một ví dụ của một thử nghiệm hội nhập

public class IntegrationTest extends AbstractIntegrationTest { 

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

} 
+0

Kể từ Spring Boot Test 1.5.0, bạn có thể [được cho là] (https://github.com/spring-projects/spring-boot/issues/8000) sử dụng '@ ContextConfiguration' với' @ SpringBootTest'. ..bạn đã thử sử dụng ngữ cảnh con chưa? –

Trả lời

0

Với hai gói com.foo.module1, và com.foo.module2 bạn phải tạo ra một lớp cấu hình cho mỗi gói. Ví dụ cho module1:

@SpringBootApplication public class Config1 {} 

Nếu bạn muốn chạy ứng dụng bằng cách sử dụng chỉ đậu mùa xuân của một gói duy nhất bạn có thể làm điều đó bằng cách sử dụng các SpringApplicationBuilder. Đoạn mã hoạt động:

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

Điều đó sẽ khởi động Spring with Config1, chỉ tìm kiếm (@ComponentScan được bao gồm trong @SpringBootApplication) trong gói dành cho đậu.

Nếu bạn muốn chạy ứng dụng hoàn chỉnh, ví dụ: tất cả hai mô-đun cùng một lúc, bạn phải tạo một lớp cấu hình trong các gói trên com.foo. Trong trường hợp đã được đề cập bên dưới, khi chạy hai mô-đun trong một ứng dụng có thể có thể ảnh hưởng lẫn nhau theo cách không mong muốn do các thư viện như khởi động mùa xuân, tôi chỉ có thể nghĩ đến hai khả năng:

  1. Sử dụng OSGi: Mà có thể không giải quyết được vấn đề này hoàn toàn và có thể bật ra được khá một thiết lập phức tạp hoặc
  2. tách ứng dụng thành hai ứng dụng và tạo ra các giao diện. Spring Boot cũng là một lựa chọn tốt cho kiến ​​trúc Microservice.
+0

Nếu các ứng dụng khởi động mùa xuân của tôi nằm trong các mô-đun khác nhau, làm thế nào để tôi có được chúng trong một bài kiểm tra? Tôi sẽ phải sử dụng mô-đun thử nghiệm tích hợp thứ ba để biết cả hai ứng dụng Nhưng sau đó tôi có được tất cả các phần khởi đầu của hai ứng dụng đó trong một classpath có thể có các phản ứng phụ (ứng dụng "A" áp dụng hành vi của ứng dụng "B" bây giờ khởi động dữ liệu khởi động là trên đường dẫn). Làm thế nào để bạn đối phó với điều đó? –

+0

Tôi đã điều chỉnh câu trả lời cho câu hỏi của mình. – rainerhahnekamp

+0

Có, tôi hiểu. Nhưng điều đó không giúp tôi. Tất nhiên tôi đã chia "ứng dụng" của tôi thành "microservices". Đó là lý do tại sao tôi muốn tích hợp kiểm thử cả hai ứng dụng đang chạy, và điều gì đã đưa ra câu hỏi "làm thế nào?" ngay từ đầu. –

Các vấn đề liên quan