マンゴー:
モックコンソール入力しようとすると、テスト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());
}
}