brunch

[코딩삼국지] #9 나머지 테스트 케이스

들어가는 글: 8화에 이어 나머지 App.java에 있던 메서드들을 테스트 케이스로 만들었습니다.

깃헙 링크: https://github.com/yudong80/coding-samguk/commit/3a859ff16da93de6c9c16a2a48b368d1e203b110


1. JUnit의 기본 메서드


앞서 JUnit 테스트 케이스의 핵심은 '확인' 이라고 하였습니다.

어떤 방법(메서드)을 사용하여 확인할 수 있을까요? 아래 3 메서드가 모두 동일한 내용입니다.


1) assertEquals(expected , actual)

: expected 값과 actual 값이 같은지 비교합니다.

2) assertTrue(actual)

: actual 값이 true인지 확인합니다.

3) assertNotNull(actual)

: actual 값이 null 이 아닌지 확인합니다.


2. testCreate낙양()


앞으로 모든 테스트 케이스는 AppTest.java에 들어있습니다.

BEFORE 소스는 App.java 에서 가져왔습니다.

파일: coding.samguk.AppTest.java

깃헙 링크: https://github.com/yudong80/coding-samguk/blob/main/V0/src/coding/samguk/AppTest.java


BEFORE (App.java)

20210830-2.png


AFTER (AppTest.java)

20210830-3.png


테스트 케이스에는 @Test 가 있어야 합니다.

정확히는

20210830-4.png

문이 필요합니다.


assertEquals() 메서드로 낙양의 번호가 11인지 확인합니다.

앞으로 거의 비슷한 내용이라 테스트 코드 코드 위주로 제시합니다.


3. test낙양장수들()

20210830-5.png


17명인지 확인합니다.


4. test조조능력치()

20210830-6.png


조조의 최종 무력은 99로 +10은 의천검에서 왔습니다.


5. testProvinceNet()

20210830-7.png


6. test군사_이동()

20210830-8.png


군사 이동을 확인하기 위해서는

1. 우금이 홍농에 있는 장수인지,

2. 우금의 현재 병사수를 확인하여 (1500명)

3. 낙양으로 이동을 수행하고

4. 낙양으로 잘 이동했는지

5. 마지막으로 낙양의 병사수가 그만큼 증가했는지 확인합니다.


여기에는 assertNotNull() , assertEquals() 등이 총 출동했네요.

필요한 만큼 assert 문은 팍팍 넣어주시면 됩니다.


7. test군사_수송()

20210830-9.png


앞의 군사 이동과 크게 다르지 않습니다.


8. test군사_전쟁준비()


마지막으로 전쟁준비 기능을 시험합니다.

20210830-10.png


여기에서는 약간의 설명이 필요합니다.

ISSUE : 전쟁준비로 사기를 높이는 알고리즘이 General.motivateSoliders() 안에 있기 때문에 예상 결과를 정확하게 비교할 수 없습니다.

>> 이런 것을 해결하려면 알고리즘 자체도 별도의 메서드로 추출해야 하는데.. 현 시점에서는 조금 느슨하게 검사합니다.


9. 전체 테스트 케이스 실행


테스트 케이스는 언제나 항상 빠른 시간안에 정상 동작(green)임을 확인할 수 있어야 합니다.


따라서 아래와 같이 Testing > V0 > 테스트 실행(▷)을 누르고

모든 테스트가 GREEN인지 확인합니다.

20210830-11.png


이번엔 모든 테스트가 3.0ms 안에 실행되었고

모두 정상입니다.


이제 군사의 다른 기능들도 구현해보도록 하겠습니다.

자바의 테스트 케이스 기능은 정말 편리한 것 같아요.


감사합니다.

2021.8.29

keyword
매거진의 이전글[코딩삼국지] #8 JUnit의 도입