2017-10-25 1 views
2

にロードされたクラスの内部Autowire異なるクラスI持って春で次のシナリオ:私は私のテストクラスのClassA(より正確にはオートワイヤリング)を使用してい春:JUnitの

public class ClassA{ 

@Autowired 
private ClassB classB; 
} 

。しかし、何とかしたいのは、私のテストクラスにClassAがオートワイヤードされている場合、オリジナルのものではなくClassBがロードされます。

これを実現する方法はありますか?

+0

通常の実行とテストケースの2つの構成が必要だと思います。 – Alex

+0

基本的には、ClassAのコピーを作成し、修正したclassBをautowireして、それを私のjunitで使用するとしますか?私はこれまでにやったことがありますが、今回はそのアプローチを避けたいと思います。私が欲しいことをするのを助ける春の仕組みがあるかどうかを考えようとしています。 – Columb1a

+0

これは、インターフェイスと実装クラスを使うのがよい理由です。実際、コンストラクタインジェクションを使うのがベストプラクティスです。これは、Springを全く必要とせずに単体テストを実行できることを意味します(コンストラクタにモックを渡すだけです)。 – chrylis

答えて

1

Bean Configurationなしでこれを行う別の方法は考えられません。

まず:あなたは2つの方法でこれを設定することができ

@Configuration 
public class AppConfig { 

    @Bean 
    public ClassB classB() { 
    return new ClassB() { 
     // this is a subclass that inherits everything from ClassB, so override what you want here 
    } 
    } 
} 

第二:hereから取られた)

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class SomeTest { 

    // do this if you only want the modified classB in 1 place 
    @Configuration 
    static class TestConfig { 
     @Bean 
     public ClassB classB() { 
      return new ClassB() { 
      // same as the first 
      } 
     } 
    } 

    @Test 
    public void testMethod() { 
    // test 
    } 
} 

最後に、あなたは新しいインターフェイスを作成することもできますメインフォルダにClassBClassBImplClassBTestImplをテストフォルダに追加します。それでも設定の1つを使用する必要があります。

関連する問題