들어가는 글: 기능들이 하나씩 추가되면서 이제 JUnit 기반의 테스트 케이스를 도입해야 합니다.
깃헙으로 한눈에 보기: https://github.com/yudong80/coding-samguk/commit/3a859ff16da93de6c9c16a2a48b368d1e203b110
앞서 군사 이동, 군사 수송과 전쟁 준비 기능을 구현하면서 상태가 변한다 라는 것을 알 수 있었습니다.
예를 들어
1) 군사 이동을 수행하면
A지역의 장수가 줄어들고 그 지역의 병사수도 줄어듭니다.
TODO: 군사이동시 금, 군량, 군마, 강노, 노궁도 이동할 수 있으나 그 기능은 현재 빠져있습니다.
2) 군사 수송을 하면
A지역의 금과 군량이 줄어들고 그만큼 B지역의 금과 군량이 늘어납니다.
3) 전쟁준비를 하면 군사의 사기가 늘어납니다.
이렇게 상태가 변해버리면 동작 확인을 하기 어렵습니다.
우리는 군사 이동, 군사 수송, 전쟁 준비와 같은 기능들을 독립적으로 테스트하고 싶습니다.
독립적으로 테스트하면 테스트 코드가 간결해집니다.
말이 어려웠죠? 실제 코드를 보면서 알아보겠습니다.
JUnit은 자바 진영에서 너무나도 유명한 테스트 프레임워크입니다.
한마디로 테스트 코드의 표준 정도로 생각하시면 됩니다.
vs code는 JUnit을 이미 지원하고 있구요, 앞서 (환경 설정)할때 Coding pack for Java를 설치하였다면 이미 거의 준비가 된 것입니다.
1) Test Runner for Java 확장 확인
없다면 설치 하세요
2) JUnit jar 파일 복사
다음 경로에서
https://search.maven.org/artifact/org.junit.platform/junit-platform-console-standalone/1.7.0-M1/jar
그 jar 파일을 다음 경로에 복사합니다 제 경우 프로젝트 이름이 V0 이므로
경로: V0/lib
폴더에 복사하였습니다.
앞서 App.java 에 있는 testXXXX() 메서드들을 차례로 이식할 것입니다.
이름도 그대로 유지합니다.
첫번째 메서드
파일: coding.samguk.App.java
메서드: testCreateSomeGenerals()
이것을 테스트 케이스로 만들었습니다.
파일: coding.samguk.AppTest.java
메서드: testCreateSomeGenerals()
깃헙 링크: https://github.com/yudong80/coding-samguk/blob/main/V0/src/coding/samguk/AppTest.java
일반 메서드와 테스트 케이스의 차이는 무엇일까요?
정답은 '확인할 수 있다' 입니다
테스트 케이스(테스트 코드)는 확인하는 코드입니다.
확인의 방법은
expected (기대했던 값)
actual (실제 값) 이 같은지 여부를 검사하는 것입니다.
testCreateSomeGenerals()는 조홍의 이름과 제갈량의 지력을 확인합니다.
Test Runner for Java 확장을 설치하면 vs code 좌측에 아이콘이 하나 추가됩니다.
거기에 마우스를 올려보면 Testing 이라고 자막(?)이 뜹니다.
이걸 누르시고
메서드 우측에 있는 세모(▷)를 누르시면 됩니다.
녹색은 성공
적색은 실패입니다.
당연히 성공합니다.
모든 테스트 케이스는 항상 언제나 빠르게 성공해야 합니다.
전체 테스트 케이스를 실행하는데 49ms 밖에 걸리지 않았습니다.
다음 화부터는 나머지 테스트 코드들에 대해서 알아보도록 하겠습니다.
특히 기존의 App.java 의 메서드와 어떻게 달라지는지 확인하시면 되겠습니다.
감사합니다.
2021.8.29