1

Spring で動作するように JUnit を構成しようとしていますが、できません。

この方法でテスト クラスを作成します。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/web-application-config.xml"})
public class MyControllerToTest {
        @Autowired
    private MyController ctr;

    @Test
    ....
}

クラスパスに、web-application-config.xml がある src/main/resources を挿入しました。その内容は次のとおりです。

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.1.xsd">

<!-- Scans for application @Components to deploy -->
<context:component-scan base-package="com.infoone.mycontrollerpackage"/>

<!-- Imports the configurations of the different infrastructure systems of the application -->
<import resource="webflow-config.xml" />
<import resource="webmvc-config.xml" />
<import resource="data-access-config.xml" />
<import resource="repository-config.xml" />
<import resource="security-config.xml" />

MyControllerToTest クラスを JUnit として実行すると、次のようになります。

ERROR: org.springframework.test.context.TestContextManager - Caught exception while allowing TestExecutionListener
[org.springframework.test.context.support.DependencyInjectionTestExecutionListener@6419fa] to prepare test instance [com.infoone.myapp.MyControllerToTest@10036f2]
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flowExecutor': Cannot resolve reference to bean 'flowRegistry' while setting bean property 'flowDefinitionLocator'; nested exception is         org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flowRegistry': Invocation of init method failed; nested exception is java.lang.IllegalStateException: An I/O Exception occurred resolving the flow location pattern '/**/*-flow.xml'
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flowRegistry': Invocation of init method failed; nested exception is java.lang.IllegalStateException: An I/O Exception occurred resolving the flow location pattern '/**/*-flow.xml'
...
Caused by: java.lang.IllegalStateException: An I/O Exception occurred resolving the flow location pattern '/**/*-flow.xml'
...
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/flows/] cannot be resolved to URL because it does not exist[/code]

ありがとうございました!

4

2 に答える 2

3

問題は、テスト中にWEB-INF フォルダーが別の場所にあるため、テスト中に (Maven を使用して) F フォルダーに (それほど簡単に) アクセスできないことです。

つまり:

  • テストを実行するときは、コンパイルされたクラスを次のフォルダーで実行します。フォルダーは次の場所にあります<project>/target/test-classesWEB-INF<project>/target
  • アプリケーションを実行すると<war>/WEB-INF、クラスが抵抗しているときに web-inf が配置されます<war>/WEB-INF/classes

何が言いたいかというと、WEB-INFフォルダー内のリソースへの相対パスが、テストとアプリケーションで異なります。

とにかく、 spring-test-mvcと呼ばれる春のプロジェクトがあります。おそらくそれを使用するか、そこのコードで見つけたいくつかのアイデアを使用できます。

于 2012-09-26T06:10:25.467 に答える