2016-08-02 23 views
10

私はsrc/main/resources/config/application.ymlを実行するスプリングブートアプリケーションを使用しています。SpringBootテストで別のapplication.ymlをロード

私はで私のテストケースを実行します。テストコードはまだプロパティをロードするために、私のapplication.ymlファイルを実行

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest 
public class MyIntTest{ 
} 

。 テストケースの実行中に別の* .ymlファイルを実行することが可能かどうか疑問です。

答えて

15

1つのオプションはプロファイルで作業することです。 、アプリケーションtest.ymlというファイルを作成しますが、そのファイルにこれらのテストのために必要なすべてのプロパティを移動して、あなたのテストクラスに@ActiveProfiles注釈を追加します。

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@IntegrationTest 
@ActiveProfiles("test") // Like this 
public class MyIntTest{ 
} 

は注意してください、それは、さらにアプリケーションをロードします--test.ymlであるため、application.ymlにあるすべてのプロパティもまだ適用されます。あなたが望んでいなければ、それらのプロファイルも使用するか、あるいはあなたのapplication-test.ymlでそれらを上書きしてください。あなたはオーバーライドのみ特定のプロパティ/ YAMLにしたい場合は、設定することができます

@TestPropertySource(locations="classpath:test.properties") 
@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(Application.class) 
public class MyIntTest{ 

} 

か、

@TestPropertySource(
     properties = { 
       "spring.jpa.hibernate.ddl-auto=validate", 
       "liquibase.enabled=false" 
     } 
) 
+0

nice answer !.それは動作します....ありがとう非常にありがとう – Exia

+1

これは正解です。注釈TestPropertySourceは、.propertiesファイルまたは.xmlファイルに対してのみ機能します。 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.htmlの「サポートされているファイル形式のセクション」を参照 – Sam

4

この参照:Spring @PropertySource using YAML

私は3番目の答えはあなたが探しているものがあると思い、すなわちにあなたのYAML値をマッピングするための個別のPOJOがあります

@ConfigurationProperties(path="classpath:/appprops.yml", name="db") 
public class DbProperties { 
    private String url; 
    private String username; 
    private String password; 
... 
} 

をその後で、あなたのテストクラスに注釈を付けますこれは:

@EnableConfigurationProperties(DbProperties.class) 
public class PropertiesUsingService { 

    @Autowired private DbProperties dbProperties; 

} 
9

あなたは@TestPropertySourceは異なる特性/ YAMLファイルをロードするために使用することができますあなたのテストプロパティはsrc/test/resources/config/application.ymlファイルにあります。春のブートテストのケースはディレクトリにapplication.ymlファイルからプロパティを取るでしょう。

+1

この注釈を使用してみましたが、テストでは私は指定したものの代わりに 'application.yml'を探します。 – ttt

+0

私のためにapplication.ymlファイルで動作しません。 – selman

5

を使用することができます

+1

実際、テストのymlファイルは、そのパス、つまり「src/test/resources/config/application.yml」にあります。しかし、テストケースを実行したときにロードされない理由はわかりません – Exia

+0

Intellij IDEAを使用していて、私の 'pom.xml'の' 'に ' **/*。yml'がありませんでした。 IDEAはあなたのコードをコンパイルするための主要なモデルとして 'pom.xml'設定を使用しています(' mvn'が実行されていなくても!)、これは私の 'src/test/resources/application.yml'が私のテストは 'target/test-classes'にはなかったからです。 – Rossiar

+0

これは、YAMLファイルの場合に該当するため、正解とマークする必要があります。 TestPropertySourceがYAMLファイルをサポートしていないことをSpring Boot Teamに確認しました。[Spring Boot JIRA](https://jira.spring.io/browse/SPR-16563) – selman

関連する問題