2017-12-28 12 views
0

私は、アノテーションベースの設定を使用して、Spring対応埋め込みTomcatアプリケーションを開発中です。このアプリケーションは、RESTエンドポイントにSpring MVCコントローラを使用します。懸念の分離として、別々のコンテキストで重複するBeanを避けるために、親コンテキストにはRESTエンドポイントではないすべてのBeanが含まれ、Spring Web MVCコンテキストにはRESTエンドポイントであるすべてのBeanが含まれます。ユニット/統合テスト中にスプリング階層を管理する方法は?

私は、アプリの構造を代表するこれらのエンドポイントについて、新しいリファクタリングと古いリファクタリングの統合テストを作成したいと考えています。そのような既存のテストクラスがあります:私はことをロード非REST豆が存在しないことを保証したいのに対し、

import com.stuff.web.MyEndpoint; 

@Configuration 
@ComponentScan(basePackages = {"com.stuff"}) 
public class SpringConfig { ... } 

@WebAppConfiguration 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {SpringConfig.class}) 
public class TestMyEndpoint { 

    @Autowired 
    private MyEndpoint myEndpoint; 

    private MockMvc mockMvc; 

    @Before 
    public void setUp() { 
     mockMvc = MockMvcBuilders 
       .standaloneSetup(myEndpoint) 
       .build(); 
    } 

    @Test 
    public void testMyEndpoint() throws Exception { 
     mockMvc.perform(get("/myendpoint") 
         .accept(MediaType.APPLICATION_JSON_VALUE)) 
         .andExpect(status().isOk()) 
         .andReturn(); 
    } 
} 

の問題は、私がこのテストに使用していますコンテキストは今ロードされ、すべての豆を持っているということですテストの実行中にRestController Beanを呼び出します。

@Configuration 
@ComponentScan(basePackages = {"com.stuff"}, 
       excludeFilters = { 
        @Filter(type = FilterType.REGEX, pattern = "com.stuff.web.*")}) 
public class SpringConfig { ... } 

のようなものを追加すると、私が行くよ分離の種類を保証するであろうが、その後、私は私がしようとしているcom.stuff.web.MyEndpointクラスへのアクセスを持っていませんテスト。

私は何かが簡単ですか?私が状況をはっきりと説明しているかどうか教えてください。

答えて

0

あなたが説明している分離の種類(mvcとnon-mvc)は、10年前の意味ではなくなりました。機能/デザインパターン(Web /サービス/リポジトリなど)でコードを区切り、そのレイヤに固有のクラスを@Configurationにします。 stereotype annotationsは、あなたのアプリケーションをどのように分割するべきかを十分に理解しています。次に、あなたのテストをあなたのターゲットコードと同じパッケージに置き、依存関係をモック/オーバーライドします。

あなたがSpring Bootを使用しているとは思われませんが(実際はそうすべきですが)、アプリケーションの "スライス"をテストするための素晴らしいセクションがドキュメントにあります。 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-testing-autoconfigured-tests

関連する問題