どのように私はモックで自動にコンソール入力に対してテストすることができますか?

マンゴー:

モックコンソール入力しようとすると、テストdoesen't振る舞うが、私は予想通り

私は、コンソール入力、出力のためのラッパークラスを作成し、その動作をからかってみました

public class ConsoleReaderWriter {

public void printLine(String message) {

    System.out.println(message);
}

public String readLine() {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    String result = "";
    try {
        result = bufferedReader.readLine();
    } catch (IOException e) {
        System.err.print(e);
    }
    return result;

}

}

//メソッドをテストします

public String readPlayerName() {
    consoleReaderWriter.printLine("> What is your name?");
    String playerName = consoleReaderWriter.readLine();
    return playerName;
}

//私のテストの試み

@Test
public void testReadPlayerNameShouldReturnNameString() {
    String testName = "John Doe";

    ConsoleReaderWriter testReaderWriter = mock(ConsoleReaderWriter.class);

    when(testReaderWriter.readLine()).thenReturn("John Doe");

    assertEquals(testName, underTest.readPlayerName());
}

私はMockitoを使用しています。私は、テストを実行すると、それは私は、コンソールからの入力を入力するように求められます。テストに合格し、私が期待される名前を入力すると、しかし、私はテスト実行しながら、任意の入力を入力するために持っていけないのでこと、それを自動化したいと思います。前もって感謝します。

Peteef:

例を見てみてください。

@RunWith(MockitoJUnitRunner.class)
public class TestClass {
   @Mock
   ConsoleReaderWriter crw;

   @InjectMocks
   UnderTestClass underTest;

   //Some other fields

   @Test
   public void testReadPlayerNameShouldReturnNameString() {
      String testName = "John Doe";

      when(crw.readLine()).thenReturn("John Doe");

      assertEquals(testName, underTest.readPlayerName());
   }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=119002&siteId=1