Javaコンソールウィンドウ出力のテスト
結果値を確認する方法では、直接出力値を見つけて出力値をテストする方法があります.
配列または集合内のデータを管理するStreamオブジェクトではありません.ここstreamは
ストリームはバイト単位でデータを転送します.InputStreamおよびOutputStreamは、I/Oの機能に関する抽象メソッドとして定義される抽象クラスである.それぞれのI/Oターゲットに応じて、継承されたクラスを使用すればよい.バイトベースのストリームのほか、アシストストリーム、文字ベースのストリームなどがある.
入力ストリーム出力ストリームI/Oターゲットタイプオーディオデバイス
コンソールウィンドウから出力された値を表示したいため、
デフォルトでは、出力する値をOutputStreamオブジェクトのシステムに保存します.outの値は、私が使用したいタイプのオブジェクト(ByteArrayOutputStream)に変更されます.
テストが完了したら、通常のコンソールウィンドウの出力のために、再び戻る必要があります.
優雅な技術路線で行われているチェスタスクには、点数が正しいことを確認するテストコードが出力されている.
JDK 11 - OutputStream JDK 11 - ByteArrayOutputStream Javaのクラシック-Chapter 15 I/O
stream
配列または集合内のデータを管理するStreamオブジェクトではありません.ここstreamは
데이터를 운반하는 데 사용되는 연결 통로
です.I/Oとは、コンピュータ内部または外部機器とプログラムとの間でデータを交換することを意味する.streamは一方向通信のみをサポートするため、Javaは入力をサポートするInputStreamと出力をサポートするOutputStreamとしてオブジェクトを分離・管理する.バイトベースのストリーム-InputStreamとOutputStream
ストリームはバイト単位でデータを転送します.InputStreamおよびOutputStreamは、I/Oの機能に関する抽象メソッドとして定義される抽象クラスである.それぞれのI/Oターゲットに応じて、継承されたクラスを使用すればよい.バイトベースのストリームのほか、アシストストリーム、文字ベースのストリームなどがある.
入力ストリーム出力ストリームI/Oターゲットタイプオーディオデバイス
コンソールウィンドウから出力された値を表示したいため、
ByteArrayOutputStream
クラスを使用しました.System .setOut
デフォルトでは、出力する値をOutputStreamオブジェクトのシステムに保存します.outの値は、私が使用したいタイプのオブジェクト(ByteArrayOutputStream)に変更されます.
private static ByteArrayOutputStream outputMessage = new ByteArrayOutputStream();
System.setOut(new PrintStream(outputMessage));
システムのoutはPrintStreamタイプであるため、PrintStreamオブジェクトは生成された値として指定される.テストが完了したら、通常のコンソールウィンドウの出力のために、再び戻る必要があります.
System.setOut(System.out);
サンプルコード
優雅な技術路線で行われているチェスタスクには、点数が正しいことを確認するテストコードが出力されている.
package chess.domain.board;
import static org.junit.jupiter.api.Assertions.*;
class StatusTest {
private static ByteArrayOutputStream outputMessage;
@BeforeEach
void setUpStreams() {
outputMessage = new ByteArrayOutputStream(); // OutputStream 생성
System.setOut(new PrintStream(outputMessage)); // 생성한 OutputStream 으로 설정
}
@AfterEach
void restoresStreams() {
System.setOut(System.out); // 원상복귀
}
@Test
@DisplayName("게임 점수 계산")
void showStatus() {
Map<Position, Piece> pieces = new HashMap<>();
pieces.put(Position.from("a1"), new Queen(Color.WHITE));
pieces.put(Position.from("a2"), new Rook(Color.BLACK));
Board board = new Board(() -> pieces);
Status status = new Status(board);
status.show(Output::printScore);
assertEquals("검은색의 점수는 5.0점 입니다.\n흰색의 점수는 9.0점 입니다.\n", outputMessage.toString()); // 버퍼에 저장된 값을 가져와 비교한다
}
@Test
@DisplayName("폰이 같은 x 에 존재할 경우의 게임 점수 계산")
void showStatusPawnScore0_5() {
Map<Position, Piece> pieces = new HashMap<>();
pieces.put(Position.from("a1"), new Pawn(Color.WHITE));
pieces.put(Position.from("a2"), new Pawn(Color.WHITE));
pieces.put(Position.from("a3"), new Pawn(Color.BLACK));
Board board = new Board(() -> pieces);
Status status = new Status(board);
status.show(Output::printScore);
assertEquals("검은색의 점수는 1.0점 입니다.\n흰색의 점수는 1.0점 입니다.\n", outputMessage.toString()); // 버퍼에 저장된 값을 가져와 비교한다
}
}
ByteArrayOutputStreamのtoString()を使用して、バッファに格納されているバイト値をStringに返します.返された値が予想された値と一致するかどうかを確認します.リファレンス
Reference
この問題について(Javaコンソールウィンドウ出力のテスト), 我々は、より多くの情報をここで見つけました https://velog.io/@rudnf003/Java-콘솔창-출력-테스트하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol