2

問題は、統合テストにさまざまなプロパティファイルをどのように使用できるかということです。詳細な説明は次のとおりです。

を使用して、Mavenとのコンテナー統合テストを実行しようとしていますtomcat7-maven-plugin。プロジェクトはSpringとJPAを使用します。現在、私が理解しているのは次のとおりです。

  • 単体テストのクラス名はパターンに従います*テストして実行mvn testするmaven-surefire-plugin
  • 統合テストのクラス名は、パターン* ITに従い、によって実行さmvn verifyれます。maven-failsafe-plugin
  • 実行すると、Tomcatを開始および停止し、warファイルをデプロイするようにトリガーできます

mvn verifyこれはすべて機能し、 Tomcatを実行すると起動します。

ただし、通常のデータベースを使用する代わりに、インメモリデータベースを使用したいと思います。私のデータベース構成は、src/main/resources/META-INF/spring/database.propertiesを介してロードされたファイルで定義されていますcontext:property-placeholder

で代替ファイルを定義しようとしましsrc/test/resources/META-INF/spring/database.propertiesたが、無視されます。内でシステムプロパティを定義できることは知っていますtomcat7-maven-pluginが、それらを使用してさまざまなプロパティファイルの読み込みをトリガーする方法がわかりません。

私のtomcat7-maven-plugin構成は次のとおりです。

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <port>9090</port>
        <path>/processing</path>
        <useTestClasspath>true</useTestClasspath>
        <systemProperties>
            <example.value.1>alpha</example.value.1>
        </systemProperties>
    </configuration>
    <executions>
        <execution>
            <id>start-tomcat</id>
            <phase>pre-integration-test</phase>
            <goals>
                <goal>run-war-only</goal>
            </goals>
            <configuration>
                <fork>true</fork>
            </configuration>
        </execution>
        <execution>
            <id>stop-tomcat</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>shutdown</goal>
            </goals>
        </execution>
    </executions>
</plugin>

プロパティはcontext-main.xml、次の行で読み込まれます。

<context:property-placeholder location="classpath*:META-INF/spring/*.properties"/>  

web.xml以下からコンテキスト構成をロードします。

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/context-*.xml</param-value>
</context-param>

テスト用に代替プロパティファイルをロードする方法について何か提案はありますか?

4

1 に答える 1

2

そのための1つの方法は、Mavenプロファイルとantプラグインを使用することです。私はそれが最もエレガントな方法ではないと思います、そして私はより良い解決策を聞くことを開いています、しかし今のところそれは私の問題を解決します。

プロファイルは、コマンドライン引数に応じて異なるMaven構成を設定する方法であるため、私の場合、統合テストを実行するには、コマンドを実行しmvn -Pintegration clean verifyます。これがプロファイルの名前であり、次のように後にintegration定義されます。pom.xmlproperties

<profiles>
    <profile>
        <id>standard</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>integration</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.1</version>
                    <executions>
                        <execution>
                            <phase>test</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <tasks>
                                    <echo>Copying test database.properties to ${project.build.outputDirectory}/META-INF/spring/</echo>
                                    <copy file="src/test/resources/META-INF/spring/database.properties"
                                        todir="${project.build.outputDirectory}/META-INF/spring/" verbose="true" overwrite="true" />
                                </tasks>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

を使用mvn clean packageすると、代わりに標準プロファイルが使用されます。プロファイルは、pomの外部の.m2/settings.xmlでも定義できることに言及するのは興味深いことです。

参照:Maven 2を使用したさまざまな環境向けのビルドoverwrite-コピーのパラメーターは必須であるか、ランダムにのみ機能し、リンクされたドキュメントには記載されていないことに注意してください。

于 2013-03-23T22:05:31.470 に答える