私は、アノテーションベースの設定を使用して、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クラスへのアクセスを持っていませんテスト。
私は何かが簡単ですか?私が状況をはっきりと説明しているかどうか教えてください。