2016-05-04 23 views
0

を失敗 - @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "クラスパス:some.xmlを"})@value設定注入は、私が使用してばねJUnitテストケースを実行しようとしてい

XMLは、豆を有しますメモリDBの詳細

<bean id="orderService" class="com.example.OrderServiceImpl"> 
     <!-- set properties, etc. --> 
    </bean> 

に私は、BeanクラスOrderServiceImpl内@value注入をやっていると一緒に定義されていますが、テストケースを実行しながら、それは起こりませんが、私は、アプリケーションを実行したときと同じで細かい実行されます。あなたは助けてもらえますか?

答えて

1

テストコンテキストにPropertySourcesPlaceholderConfigurerまたはPropertyPlaceholderConfigurerを追加する必要があります。このSOの質問はあなたにヒントを与えるかもしれません:Populating Spring @Value during Unit Test

0

maintestの両方のツリーにsome.xmlが存在するかどうかを確認してください。両方に存在する場合、testツリー内のツリーは、mainブランチのツリーを上書きする必要があります。

some.xmlあなたが実際にロードされているが、私はプロパティを管理するために、より近代的な方法があることを認識し、これは簡単で、ユニットテストのために指定することは容易であるなど

<context:property-placeholder location="classpath:some.properties"/> 

として、property-placeholderを持っていることを確認してください。

私は、クラスパス上の設定ファイルでは非常に扱いにくいので、私は@ContextConfigurationの機能を利用して各テスト用に専用の最小構成を作成したいと思っています。それが動作する方法は、各テストクラスに対して、慣例により、テストクラスパッケージと同じ相対ディレクトリパスの設定ファイルを探し、テストケースの後ろに名前を付けることです。そうすれば、各テストケースの設定とプロパティを完全に制御できます。あなたはそれを試してみるかもしれません - それは共有設定ファイルによって引き起こされる混乱を排除することができます。それを行うには、@ContextConfigurationの値を削除します。次に、com.myCompany.SomeTestのテストケースがsrc/test/java/com/myCompany/にあるとします。ディレクトリsrc/test/resources/com/myCompanySomeTest-context.xmlというファイルを作成し、そのユニットに必要な最小限の設定をファイルに入れます。 @ContextConfigurationは、その場所でその名前の設定ファイルを見つけてテストに使用します。私が触れた慣例の一部ではありませんが、各テストのプロパティファイルを同じディレクトリに配置し、そのテストに必要なプロパティを指定します。テストケース名の後ろに指定します(例:SomeTest.properties)。そうした場合、あなたは

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration      // no parameters 
public class FileEncryptionUtilsTest { ... 

をかけることになり、あなたのテストケースの上部に

<context:property-placeholder location="classpath:com/myCompany/SomeTest.properties"/> 

:あなたのテストケース固有のコンテキストでは、あなたのテスト固有のプロパティを取得するには、このようproperty-placeholderの行を追加します。共有コンテキストに追加されるものの副作用や、同じ名前の複数のコンテキストファイルから生じるエラーを処理することなく、豆と値をあなたの心のコンテンツに注入することができます。

ここで重要な利点は、アプリケーションコンテキストファイルによって表される統合ではなく、ここでユニットをテストすることです。単体テストでアプリケーションコンテキストファイルを共有する場合は、Beanと一緒にアプリケーションコンテキストをテストしています。これは単体テストの必要性ではなく、統合テストの目標のほうです。

関連する問題