6

私は2つの春のブートアプリケーション1回のテストで複数のSpring Bootアプリケーションをテストするには?

  • fooApp
  • barApp
  • テストとマルチモジュールMavenプロジェクトを持っていることができますテストを設定する方法

同じプロセスで別々のバックブートアプリケーションをそれぞれ独自の設定コンテキストでロードします。

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

そして、二つのパッケージのcom.foo.module1考えると、統合テスト

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

の例、そしてあなたは、パッケージごとのConfigurationクラスを作成する必要がありcom.foo.module2。 Module1のための例 :

@SpringBootApplication public class Config1 {} 

あなたがSpringApplicationBuilderを使用していることを行うことができ、単一のパッケージの唯一のSpring Beanを使用して、アプリケーションを実行したい場合。作業スニペット:

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

豆のためにそのパッケージに(@ComponentScanは@SpringBootApplicationに含まれている)のみを検索CONFIG1で春を起動します。

完全なアプリケーションを実行したい場合は、次のようにします。すべての2つのモジュールを一度にコンパイルするには、上位パッケージcom.fooに設定クラスを作成する必要があります。

1つのアプリケーション内で2つのモジュールを実行することが、おそらくスプリングブートスターターのようなライブラリのために望ましくない方法で干渉する可能性がある場合、私は2つの可能性しか考えられません。問題を完全に解決していない可能性があり、非常に複雑なセットアップや

  • 2つのアプリケーションにアプリケーションを分割し、インタフェースを作成することが判明するかもしれません:OSGiのを使用して

    1. 。スプリングブートは、マイクロサービスアーキテクチャにも適しています。
  • +0

    私のスプリングブートアプリケーションが異なるモジュールにある場合、どのようにそれらを1つのテストで入手できますか?私は両方のアプリケーションを知っている第3の "統合テストモジュール"を使用しなければならないだろうが、私は副作用を持つかもしれない1つのクラスパスでこれらの2つのアプリケーションのすべての起動を一時的に取得する(アプリケーション "A"今ではバネデータスターターが進んでいます)。あなたはそれにどのように対処していますか? –

    +0

    あなたの質問に私の答えを適応させました。 – rainerhahnekamp

    +0

    はいわかります。しかし、それは私を助けません。もちろん私はすでに "アプリケーション"を "マイクロサービス"に分割しています。それで私はなぜアプリケーションを実行しているのかをテストしたいのですが、どうしたのでしょう?最初は –

    関連する問題