brunch

매거진 코딩특강

You can make anything
by writing

- C.S.Lewis -

[코딩삼국지] #8 JUnit의 도입

들어가는 글: 기능들이 하나씩 추가되면서 이제 JUnit 기반의 테스트 케이스를 도입해야 합니다. 

깃헙으로 한눈에 보기: https://github.com/yudong80/coding-samguk/commit/3a859ff16da93de6c9c16a2a48b368d1e203b110 


1. 테스트 케이스 


앞서 군사 이동, 군사 수송과 전쟁 준비 기능을 구현하면서 상태가 변한다 라는 것을 알 수 있었습니다.

예를 들어 

1) 군사 이동을 수행하면 

A지역의 장수가 줄어들고 그 지역의 병사수도 줄어듭니다. 


TODO: 군사이동시 금, 군량, 군마, 강노, 노궁도 이동할 수 있으나 그 기능은 현재 빠져있습니다.


2) 군사 수송을 하면

A지역의 금과 군량이 줄어들고 그만큼 B지역의 금과 군량이 늘어납니다. 

3) 전쟁준비를 하면 군사의 사기가 늘어납니다. 


이렇게 상태가 변해버리면 동작 확인을 하기 어렵습니다. 


우리는 군사 이동, 군사 수송, 전쟁 준비와 같은 기능들을 독립적으로 테스트하고 싶습니다. 

독립적으로 테스트하면 테스트 코드가 간결해집니다. 


말이 어려웠죠? 실제 코드를 보면서 알아보겠습니다. 


2. JUnit 설치 


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 

폴더에 복사하였습니다. 


3. 첫번째 테스트 케이스 


앞서 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()는 조홍의 이름과 제갈량의 지력을 확인합니다. 


4. 테스트 케이스 확인 


Test Runner for Java 확장을 설치하면 vs code 좌측에 아이콘이 하나 추가됩니다. 

거기에 마우스를 올려보면 Testing 이라고 자막(?)이 뜹니다. 


이걸 누르시고 


메서드 우측에 있는 세모(▷)를 누르시면 됩니다. 


녹색은 성공 

적색은 실패입니다. 

당연히 성공합니다. 


모든 테스트 케이스는 항상 언제나 빠르게 성공해야 합니다. 


전체 테스트 케이스를 실행하는데 49ms 밖에 걸리지 않았습니다. 


다음 화부터는 나머지 테스트 코드들에 대해서 알아보도록 하겠습니다. 

특히 기존의 App.java 의 메서드와 어떻게 달라지는지 확인하시면 되겠습니다. 

감사합니다. 


2021.8.29

매거진의 이전글 [코딩삼국지] #7 군사 수송과 전쟁준비 구현

매거진 선택

키워드 선택 0 / 3 0

댓글여부

afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari