2016-12-10 9 views
0

を解決しません:@ActiveProfileは( "統合テスト")私は、次の構成との統合テストを持っている

@RunWith(SpringJUnit4ClassRunner.class) 
@ActiveProfiles("integration-test") 
@ContextConfiguration(classes = { PersistenceJpaConfig.class, ContextConfig.class, ServiceConfig.class, WebConfig.class}) 
@WebAppConfiguration 
public class LeadsIntegrationTest { 

... 

} 

PersistenceJpaConfigクラス以下の通りです:

@Configuration 
@EnableTransactionManagement 
@ComponentScan({ "org.persistence", "org.common.persistence" }) 
@PropertySource({ "persistence-${spring.profiles.active}.properties" }) 
@EnableJpaRepositories(basePackages = org.persistence.dao") 
public class PersistenceJpaConfig { 

... 

} 

$ {spring.profiles.active}は、アクティブなプロファイルが "dev"のときに問題を解決しますが、@ActiveProfiles( "integration-test")で "integration-test"に設定すると解決しません。 persistence-integration-test.propertiesはsrc/main/resourcesにあります。プロパティf devにはmysql設定があり、統合テストにはdevデータから隔離された統合テストを実行するためのh2埋め込み設定があります。テストが実行されると、次のようになります。

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.profiles.active' in string value "persistence-${spring.profiles.active}.properties" 

ここでは何が起こっていますか?

答えて

0

あなたはdevプロファイルをどのように設定したかについては言及していませんが、システムプロパティで設定することをお勧めします。 @ActiveProfilesを使用すると、@PropertySourceアノテーションが値を取得するには、プロファイルの解像度が遅すぎます。

それにもかかわらず、そのカスタムコードの100%がスプリングブーツでサポートされていることをご存知ですか?なぜそれらをapplication-integration-test.propertiesapplication-dev.propertiesに入れられないのですか?

+0

お返事ありがとうございました。私はあなたがActiveProfilesの解像度について絶対に正しいと思います。私はそれを取り除き、私のsrc/test/javaとsrc/test/resourcesフォルダに別々のJpaPersistenceConfigTest.javaクラスとpesistence-integration-test.propertiesファイルを作成しました。プロパティファイルの場所は、JpaPersistenceConfigTest.javaクラスにハードコードされています。現在、可変解像度はありません。トリッキーな部分は、ユニットテストの場所からクラスパス上のこのプロパティファイルを見つけるためにSpringを取得していました。クラスパスを新しいJpaPersistenceConfigTest.javaの@PropertySourceに明示的に入れる必要がありました。 –

+0

私はあなたがそれを働かせてうれしいです。 Spring Bootが提供しなければならないものを使用しようとしなかったのは残念ですが、Java構成の単一行を書く必要はありません。 –

+0

こんにちはStephane。あなたはSpringBootを使ってどのようにしていますか? –