5

私のSpring + Mavenアプリでは、複数のデータソースに対して実行したいデータアクセスレイヤーのテストをいくつか作成しました。私は次のようなものを持っています:

@ContextConfiguration(locations={"file:src/test/resources/testAppConfigMysql.xml"})
public class TestFooDao extends AbstractTransactionalJUnit38SpringContextTests {
  public void testFoo(){
     ...
  }
} 

現在、構成の場所がハードコードされているため、1 つのデータソースに対してのみ使用できます。テストを 2 回呼び出して、2 つの異なる構成 (testAppConfigMysql.xml と testMyConfigHsqlDb.xml など) を渡す最良の方法は何ですか?

システムプロパティを介してこれを行うための提案を見てきました。システムプロパティの異なる値でテストを2回呼び出すようにmavenに指示するにはどうすればよいですか?

4

3 に答える 3

1

これには、セクシーで派手な解決策があるかどうかはわかりません。すべてのテスト内容を含む基本クラスを実装し、それを次のように、異なる注釈ベースの構成を持つ 2 つのクラスに継承します。

@ContextConfiguration(locations={"firstDs.xml"})
public class TestFooDaoUsingFirstDs extends TestFooDao {
}

@ContextConfiguration(locations={"secondDs.xml"})
public class TestFooDaoUsingSecondDs extends TestFooDao {
}

このように非常に多数の異なるデータソースを処理する必要がない限り、それで問題ありません。

于 2012-04-27T09:56:49.293 に答える
0

Maven インボーカー プラグインを確認してください。プロファイルもサポートしています。

于 2012-04-27T11:50:00.030 に答える
0

ではなくfile:...、 を使用できますclasspath:...( を削除します。src/test/resources使用する場合は暗黙的ですclasspath)。次に、次の行で単一のマスター コンテキストを作成できます。

<import resource="dao-${datasource}.xml" />

オプションを指定して Maven ビルドを実行すると、マスター コンテキスト内の が指定したもの-Ddatasource=fooに置き換え${datasource}られます。したがって、さまざまな構成datasource-foo.xmldatasource-bar.xmlなどを使用できます。

(これを機能させるには、POM で Maven リソース フィルタリングを有効にする必要があります)。

あるいは、Spring 3.1 の新機能をチェックしてください: http://www.baeldung.com/2012/03/12/project-configuration-with-spring/

編集: 3 番目のオプションは、すべてのテスト クラスにスーパークラスを拡張@Parameterisedさせ、パラメーターが異なる Spring コンテキストである Junit の を使用することです。その場合は使用できませんでし@ContextConfigurationたが、いつでも手動で Spring コンテキストを作成してから、次を使用してテスト クラスを自動配線できます。org.springframework.beans.factory.config.AutowireCapableBeanFactory.autowireBean()

于 2012-04-27T10:16:34.180 に答える