2016-12-14 16 views
1

私はSpring Boot 1.4.2を使用しています。@ConditionaOnPropertyでアノテートされたクラスのSpringとWebの統合テスト

例えば、私は

@Service 
@ConditionalOnProperty("${my.property.enabled:false}") 
public class MyService { 

} 

を次のように注釈付きのサービスを持っていると私はそれが統合テストを行うテストしたいです

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) 
public class MyServiceTest { 

    @Autowired 
    private MyService myService; 

} 

サービスはテストで自動的に行われません。私はテストフォルダ内のプロパティファイルのプロパティを設定しないようにしたい。 MyServiceTest内のそのような注釈を使用してプロパティを直接有効にすることはできませんか?

+0

あなたが達成しようとしていることを正確に知るのに役立ちます。 '@Bean MyService'を無条件に宣言するテストのための' @Configuration'クラスを持つだけでよいでしょう。 – chrylis

+0

このアプローチは興味深いようです。 MyServiceTestで特定の設定を実行するにはどうすればよいですか? –

+0

新しいBootテストの魔法の仕組みがわからない。私は通常 '@ ContextConfiguration'を使用します。テストクラスで(静的な) '@ Configuration'ネストされたクラスを宣言して、それが取得されたかどうかを調べることができます。 – chrylis

答えて

1

更新

ステファンは、以下に示すテスト目的のプロパティインライン化は、あなたが@TestPropertySourceを必要としません、その場合にはpropertiesパラメータを経由して直接@SpringBootTestに発生する可能性がコメントで述べたように:

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT, 
       properties = { "my.property.enabled = true" }) 
public class MyServiceTest { 

    @Autowired 
    private MyService myService; 

} 

オリジナル回答

あなたは直接@TestPropertySourceを使用して、テストの設定クラスに必要なプロパティをインライン化することができます

@RunWith(SpringRunner.class) 
@SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) 
@TestPropertySource(properties = { "my.property.enabled = true" }) 
public class MyServiceTest { 

    @Autowired 
    private MyService myService; 

} 

はまた、あなたはそれが動作しません定義されてきたように注釈が、多分あなたは、その場合には@ConditionalOnExpressionを使用することを意図していることに注意してください

@Service 
@ConditionalOnExpression("${my.property.enabled:false}") 
public class MyService { 

} 

をしかし@ConditionalOnPropertyは、より表現力で、あなたのケースでのように記述することができます:それは働くだろう

@Service 
@ConditionalOnProperty(prefix="my.property" , name = "enabled", havingValue = "true") 
public class MyService { 

} 
+2

「SpringBootTest」にはこれに対する 'properties'のショートカットがあると言うことで、あなたの答えを更新することができます。したがって、@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT、properties = "" my.property.enabled = true ")のようなものになります。 –

+0

Stephaneに感謝します。私の答えを更新します。 – dimitrisli

関連する問題