모눈종이에 사각사각
[우테코 프리코스 2주차] NsTest 분석 본문
2주차에서 우리가 이뤄야할 것들 중 하나가 테스트 코드에 익숙해지고, 테스트 도구를 잘 다루는 것이다.
아직 테스트 코드에 대해 모르는 것이 많아 이 기회에 하나씩 정리해가며 분석해보려고 한다.
2주차의 과제 테스트는 NsTest 클래스의 메서드를 활용해서 진행된다.
⚾ run 메서드
게임종료_후_재시작() 테스트코드를 보면 run()이 들어가있는 것을 확인할 수 있다.
run()은 다음과 같이 구현되어 있다.
protected final void run(final String... args) {
command(args);
runMain();
}
⚾ command 메서드
run() 안에 있는 command()은 다음과 같다.
private void command(final String... args) {
final byte[] buf = String.join("\n", args).getBytes();
System.setIn(new ByteArrayInputStream(buf));
}
String.join() : 문자열 배열 내의 여러 개의 요소를 붙일 때 사용한다.
String.getBytes() : 문자열을 byte 배열로 변환한다.
ByteArrayInputStream : 메모리, 즉 바이트 배열에 데이터를 입출력 하는데 사용되는 스트림. 주로 다른 곳에 입출력하기 전에 데이터를 임시로 바이트배열에 담아서 변환 등의 작업을 하는데 사용된다. (InputStream을 상속받았다.)
System.setIn() : java.lang.System의 setIn()은 standard input stream을 재할당해준다.
standard input stream이 뭘까?
궁금하여 [Java] 표준 입력 스트림이란? 에 정리해두었다.
한마디로 command()는 입력받은 파라미터 값을 \n을 넣어 byte 배열로 변환한 후, 마치 사용자가 입력한 것 처럼 해주는 메서드이다.
⚾ runMain 메서드
run() 안에 있는 runMain()은 다음과 같다.
protected abstract void runMain();
추상메서드로 구현되어있기 때문에 NsTest를 상속받은 클래스를 runMain()을 구현해주어야 한다.
실제로 테스트코드에서 runMain()이 오버라이드 되어 있음을 확인할 수 있다.
처음으로 돌아가 run 메서드는 사용자에게 입력을 받고, 게임을 시작하는 역할을 한다.
📚 참고자료
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html
https://codechacha.com/ko/java-convert-bytes-to-string/
남궁성, 『자바의 정석』, 도우출판
'활동기록' 카테고리의 다른 글
[프리코스] 3주차 회고 (0) | 2022.11.17 |
---|---|
[프리코스] 2주차 회고 (0) | 2022.11.09 |
System.out.println() 단위 테스트하기 (0) | 2022.11.05 |
[우테코 프리코스 2주차] Assertions 분석 (0) | 2022.11.04 |
[프리코스] 1주차 회고 (0) | 2022.11.03 |