2013-04-11 13 views
6

サービスレイヤー&ビューレイヤーのコンテキスト構成を明確に抽象化しており、以下のようにロードしています。Spring MVCテストでWebアプリケーションコンテキストを設定する方法

ここでは、アプリケーションをテストするためにSPRING MVCテストフレームワークを導入しようとしています。

このためには、私の実際のWebアプリケーションと同じ環境をセットアップする必要があります。

どうすればいいですか?

次の設定を両方のコンテキストをロードするためにテストしました。

@ContextConfiguration(locations = { "classpath*:META-INF/spring/applicationContext*.xml", 
    "file:src/main/webapp/WEB-INF/spring/mmapp-servlet.xml" }) 

しかし、その私たちは、ルートアプリケーションコンテキストとWebアプリケーションのコンテキストの両方でグローバル・セキュリティーを定義している

Caused by: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Duplicate <global-method-security> detected. 

を言ってerroring。

注:上記の問題は、私のWebアプリケーションを実行しても表示されません。それは私がSpring MVCテストを実行したときにのみ発生します

グローバルセキュリティと1つの場所を削除して、テスト実行時にエラーが発生しました。どのSpringアプリケーションが実際にコンテキストをロードしていないと警告していますか。

私はSpring MVCテスト環境を、私のSpring Webアプリケーション環境が動作するのと同じ方法で使用するように設定したいと思います。どのように私はそれを達成することができます示唆してもらえますか?

答えて

7

@ContextHierarchy注釈を使用してください。そのjavadocはそれをうまく説明します。あなたの場合、使用するでしょう

@WebAppConfiguration 
@ContextHierarchy({ 
    @ContextConfiguration(locations = { "classpath*:/META-INF/spring/applicationContext-*.xml" }), 
    @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/mmapp-servlet.xml" }) 
}) 
1

あなたのappContextをmeta-infに入れないでください。

<import resource="classpath:beans.xml"/> 

は、私が作成します。

"通常" の方法は、あなたのWEB-INF

<context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>WEB-INF/spring-servlet.xml</param-value> 
    </context-param> 

ANDNに1つの春-servlet.xmlを持っているxmlファイル内の異なるファイルをインポートすることです私のテストのための内容:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations ="classpath:applicationContext-test.xml") 
@Transactional 
public class MyTest { 

あなたのBeanは、豆を2回インポートしていますか?xmlと注釈の両方でそれらを定義していますか?

+0

アーキテクチャ上の問題が少ないため、両方のコンテキストファイルをマージしたり、Webアプリケーションのコンテキストに含める必要はありません。さらに、私は私のテストでも私のアプリケーションを実行するときに起こる同じアプリケーションコンテキストセットアップが欲しいです。 – Shiv

関連する問題