2016-03-31 11 views
0

私は以下のクラスのシナリオを持っています。 MyTestableClassをテスト中に、私はAutowiredクラスを処理したいと思っています。 私はAutoWiredクラスの変数のみをモックしたいと思います。Mockitoモックランオートワイヤークラスオブジェクト

サンプルクラスはbelow-例えば

public class MyTestableClass { 

    @Autowired 
    private MyServiceClass service; 

    public void handleError(){ 
    ... 
    service.doSomething(); 

    } 
} 

public class MyServiceClass { 

    @Autowired 
    private JMSChannel channel; 

    public void doSomething(){ 
     System.out.println("Inside Service class"); 
     ..... 
     channel.isAvailable(); 
     ..... 
    } 
} 

@RunWith(MockitoJUnitRunner.class) 
public class MyTestableClassTest { 
    private MyTestableClass testClass= new MyTestableClass(); 

    private JMSChannel channel; 

    @Before 
    public void init(){ 
    channel= mock(JMSChannel.class); 
    when(channel.isAvailable()).thenReturn(Boolean.TRUE); 
    } 

    @Test 
    public void test(){ 
     testClass.handleError(); 
    } 
} 

ようで、コンソールはtrueを返す前に、私に「インサイドサービスクラス」を与える必要があります。

ありがとうございました!

+0

+1、どのように私はAutowiredサービスのインスタンスを作成するのですか? doSomething()に入るために、私はそれを嘲笑したくありません。ありがとう! –

+1

理想的には、フィールドインジェクションからコンストラクタインジェクションに移動し、次にモックをコンストラクタに渡すだけです。 – chrylis

+0

@chrylis、私は/コードを頼むことがありますか? –

答えて

1

あなたのサービス(またはそのモック)を作成してインスタンス化し、そのチャンネルをあなたの模擬したものに設定してから、MyTestableClass#serviceに設定する必要があります。 spring-testからReflectionTestUtils

@Before 
public void init(){ 
    channel= mock(JMSChannel.class); 
    when(channel.isAvailable()).thenReturn(Boolean.TRUE); 
    MyServiceClass service = new MyServiceClass(); 
    ReflectionTestUtils.setField(service, "channel", channel); 
    myTestableClass = new MyTestableClass(); 
    ReflectionTestUtils.setField(myTestableClass, "service", service); 
} 

NB:あなたの代わりにセッターを使用することができます)のようなもの

+2

Mockitoには、[Whitebox](http://docs.mockito.googlecode.com/hg/org/mockito/internal/util/reflection/Whitebox.html)クラスが付属しています。これは、ReflectionTestUtilsと基本的に同じです。 –

+0

例外が発生します"java.lang.IllegalArgumentException:このテストケースを実行しているときに、ターゲット[MyServiceClass]"の[null]型のフィールド[channel]を見つけることができませんでした。 –

+0

これは、コピー貼り付けの回答で使用する準備ができていません。ちょうど出発点/説明です。あなたの誤りを説明するかもしれない間違いを編集しました。 –