public class AppTest {
@Test
@DisplayName("종료를 누르면 꺼진다.")
void t1() {
Scanner scanner = TestUtil.genScanner("""
종료
""".stripIndent()
);
new App(scanner).run();
scanner.close();
System.out.println("프로그램이 종료되었습니다.");
}
@Test
@DisplayName("등록을 입력하면 명언과 작가를 입력받는다.")
void t2() {
Scanner scanner = TestUtil.genScanner("""
등록
현재를 사랑하라.
작자미상
종료
""".stripIndent()
);
new App(scanner).run();
scanner.close();
System.out.println("프로그램이 종료되었습니다.");
}
@Test
@DisplayName("등록을 완료하면 '1번 명언이 등록되었습니다.'를 출력한다.")
void t3() {
ByteArrayOutputStream byteArrayOutputStream = TestUtil.setOutToByteArray();
Scanner scanner = TestUtil.genScanner("""
등록
현재를 사랑하라.
작자미상
종료
""".stripIndent()
);
new App(scanner).run();
scanner.close();
String result = byteArrayOutputStream.toString();
assertThat(result).contains("1번 명언이 등록되었습니다.");
TestUtil.clearSetOutToByteArray(byteArrayOutputStream);
System.out.println("프로그램이 종료되었습니다.");
}
}
public class App {
private final Scanner scanner;
public App(Scanner scanner) {
this.scanner = scanner;
}
public void run() {
System.out.println("=== 명언 앱 ===");
while(true) {
System.out.println("명령) ");
String cmd = scanner.nextLine();
if(cmd.equals("종료")) {
break;
} else if(cmd.equals("등록")) {
System.out.print("명언 : ");
String content = scanner.nextLine();
System.out.print("작가 : ");
String author = scanner.nextLine();
System.out.println("1번 명언이 등록되었습니다.");
break;
}
}
}
}
new App(scanner).run()
: 스캐너를 키보드로 입력받는 스캐너 말고 만들어서 집어넣는 방식으로 바꾼다.
ByteArrayOutputStream byteArrayOutputStream = TestUtil.setOutToByteArray();
: 출력 값들이 화면에 출력되는 것이 아니라 byteArrayOutputStream에 차곡차곡 쌓인다.