2017-07-15 11 views
0

私は、複数の統合テストで繰り返されるコードを持っています。コードはテストの前後に実行されます。統合テストでのAutowire junitルール

これを達成するためには、JUnit @Ruleを使用することが最適な方法であると判断しました。

問題は、ルールがいくつかの@Autowiredスプリング豆にアクセスする必要があるということです。 。

@Bean 
public CustomSpringRule getCustomSpringRule(SomeOtherBean someOtherBean) { 
    return new CustomSpringRule(someOtherBean) 
} 

:私は私の豆を追加したために私のコンテキストを持って

public class CustomSpringRule extends ExternalResource { 
    private final SomeOtherBean; 

    public CustomSpringRule(SomeOtherBean someOtherBean) { 
     this.someOtherBean = someOtherBean; 
    } 

    @Override 
    public void before() { 
     someOtherBean.someMethod(); 
    } 
    (...) 
} 

:Autowireが正常に動作しますので、(テストが春の統合テストランナーで実行されている

私はルールを持っています

@Autowire 
@Rule 
public CustomSpringRule customSpringRule 

それはすべてが正常に動作しますが、本当に私は決して私たち:最後に、私はちょうどテストファイル内のルールBeanをautowiredていますJUnitのリフレクションとSpring Autowireがうまくいっていないか、または最初の見た目では明らかでないいくつかの問題があることを少し心配しています。

これが有効で安全かどうかは誰にも示唆がありますか?

+0

特定の順序で実行する必要があるテストを行うには、コードの臭いのようです。テストはお互いに独立しているべきです –

答えて

0

ここで@Ruleは必要ないと思います。「複数の統合テストで繰り返されるコードがあります。コードはテストの前後に実行されます。」これは、JUnitの@Beforeアノテーションと@Afterアノテーションを使用して実現できます。これらの注釈で注釈を付けられたメソッドは、すべてのテストの前後に実行されます。したがって、これらのメソッドから共通コードを呼び出すことができます。

+0

はい私はコードの繰り返しを避けたいと思っていましたが、きちんとしたルールを持っていました。反対側で私はいくつかのtestignロジックを行うために春の豆を使用すべきかどうかはわかりません。 – Taks

+0

よくあるのは、共通のコードをテスト以外の場所に置いて、すべてのテストで使用できるようにすることです。上記の "someOtherBean.someMethod();"のように、呼び出しが繰り返されるだけです。 – ravinikam

関連する問題