21

Tomcat でアプリケーションを実行すると、spring-context.xml ファイルは次の場所にあります。

/WEB-inf/spring-context.xml

これで結構です。しかし、junit テストを実行するには、次のように spring-test-context.xml の場所を指定する必要があります。

@ContextConfiguration(locations={"classpath:/spring-test-context.xml"})

これが機能する唯一の方法は、ファイルが次の場所にある場合です。

/src/spring-context.xml

アプリケーションで同じ場所にある spring-context ファイルを見つけるにはどうすればよいですか? junit睾丸で動作し、Tomcatにデプロイされるようにするには?

これを試してみたところ、Beanが見つからないというエラーがたくさん出ましたが、ファイルが見つからないとは言いませんでした..

classpath:/WEB-INF/spring-test-context.xml
4

2 に答える 2

39

ダフィーモが示唆したように、Spring TestContext Framework (TCF) は、文字列の場所がデフォルトでクラスパスにあると想定しています。詳細については、ContextConfigurationの JavaDoc を参照してください。

ただし、Spring のリソース抽象化を使用して (つまり、「file:」プレフィックスを使用して) 絶対パスまたは相対パスでファイル システム内のリソースを指定することもできることに注意してください。詳細については、Spring のmodifyLocations()メソッドの JavaDoc を参照してくださいAbstractContextLoader

たとえば、XML 構成ファイルが"src/main/webapp/WEB-INF/spring-config.xml"プロジェクト フォルダーにある場合は、次のように相対ファイル システム パスとして場所を指定できます。

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring-config.xml")

別の方法として、Spring 構成ファイルをクラスパス (例: src/main/resources) に保存し、Spring MVC 構成のクラスパスを介してそれらを参照することもできます。たとえば、次のようになります。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/spring-config.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

このアプローチでは、テスト構成は次のようになります (リソースがクラスパスのルートにあることを示す先頭のスラッシュに注意してください)。

@ContextConfiguration("/spring-config.xml")

また、リファレンス マニュアルの「XML リソースを使用したコンテキスト構成」セクションが役立つ場合もあります。

よろしく、

サム

(Spring TestContext フレームワークの作成者)

于 2012-05-09T18:58:13.673 に答える
11

問題は、Web アプリの CLASSPATH に /WEB-INF がないことです。ただし、/WEB-INF/classes は.

テストの問題は、アプリサーバーで実行していないため、デフォルトでは WEB-INF/classes が CLASSPATH の一部ではないことです。テストの CLASSPATH に WEB-INF/classes が含まれるようにテストを設定するか、相対または絶対ファイル パスを使用してそれらを検索することをお勧めします。

于 2012-04-30T14:39:18.950 に答える