모눈종이에 사각사각

[우테코 프리코스 2주차] NsTest 분석 본문

활동기록

[우테코 프리코스 2주차] NsTest 분석

모눈종이씨 2022. 11. 3. 03:52

2주차에서 우리가 이뤄야할 것들 중 하나가 테스트 코드에 익숙해지고, 테스트 도구를 잘 다루는 것이다.

아직 테스트 코드에 대해 모르는 것이 많아 이 기회에 하나씩 정리해가며 분석해보려고 한다.

 

2주차의 과제 테스트는 NsTest 클래스의 메서드를 활용해서 진행된다.

ApplicationTest.java 전체 코드

⚾ 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을 상속받았다.)

ByteArrayInputStream의 일부

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/

남궁성, 『자바의 정석』, 도우출판

 

 

 

 

 

 

 

 

Comments