2017-02-12 8 views
0

目標は、ユニットテストを実行するときにInputReaderクラスのreadInputメソッドを特定の値に戻す方法です。私は以下のコードを実行すると、私が手:このモックはどうやって作れますか?

モックが機能しなかったことを意味し
java.lang.AssertionError: 
Expected :1 
Actual :0 

。 Javaでどのように動作させるには?

package foo; 

import org.junit.Test; 

import static org.junit.Assert.assertEquals; 
import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.when; 


public class InputTest { 
    private int getInput() { 
     return new InputReader().readInput(); 
    } 

    @Test 
    public void getInputTest() throws Exception { 
     InputReader sc = mock(InputReader.class); 
     when(sc.readInput()).thenReturn(1); 

     assertEquals(1, getInput()); 
    } 
} 

class InputReader { 
    int readInput() { 
     return 0; 
    } 
} 
+0

モックInputReaderを作成していますが、呼び出すメソッド(getInput())はそのモックインスタンスを使用しません。 'new InputReader()'を使います。その別のインスタンスは、InputReaderの模擬インスタンスではなく別のインスタンスです。 –

答えて

0

getInputメソッドで明示的にInputReaderを作成します。あなたが作ったモックはどこにも使われません。それを使用するには、

@Test 
public void getInputTest() throws Exception { 
    InputReader sc = mock(InputReader.class); 
    when(sc.readInput()).thenReturn(1); 

    assertEquals(1, sc.readInput()); 
} 

を呼び出す必要があります。それ以外の場合は、getInputで使用するamember変数を作成することがあります。または、Springのような依存性注入フレームワークを使用します。

0

InputTest#getInputの代わりに、実際にはクラスInputReaderを嘲笑しています。違いを見ることができます:

@Test 
public void getInputTest() throws Exception { 
    InputReader sc = mock(InputReader.class); 
    when(sc.readInput()).thenReturn(1); 

    assertEquals(0, getInput());  // no mock 
    assertEquals(1, sc.readInput()); // mock 
} 
関連する問題