들어가는 글: 8화에 이어 나머지 App.java에 있던 메서드들을 테스트 케이스로 만들었습니다.
깃헙 링크: https://github.com/yudong80/coding-samguk/commit/3a859ff16da93de6c9c16a2a48b368d1e203b110
앞서 JUnit 테스트 케이스의 핵심은 '확인' 이라고 하였습니다.
어떤 방법(메서드)을 사용하여 확인할 수 있을까요? 아래 3 메서드가 모두 동일한 내용입니다.
1) assertEquals(expected , actual)
: expected 값과 actual 값이 같은지 비교합니다.
2) assertTrue(actual)
: actual 값이 true인지 확인합니다.
3) assertNotNull(actual)
: actual 값이 null 이 아닌지 확인합니다.
앞으로 모든 테스트 케이스는 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)
AFTER (AppTest.java)
테스트 케이스에는 @Test 가 있어야 합니다.
정확히는
문이 필요합니다.
assertEquals() 메서드로 낙양의 번호가 11인지 확인합니다.
앞으로 거의 비슷한 내용이라 테스트 코드 코드 위주로 제시합니다.
17명인지 확인합니다.
조조의 최종 무력은 99로 +10은 의천검에서 왔습니다.
군사 이동을 확인하기 위해서는
1. 우금이 홍농에 있는 장수인지,
2. 우금의 현재 병사수를 확인하여 (1500명)
3. 낙양으로 이동을 수행하고
4. 낙양으로 잘 이동했는지
5. 마지막으로 낙양의 병사수가 그만큼 증가했는지 확인합니다.
여기에는 assertNotNull() , assertEquals() 등이 총 출동했네요.
필요한 만큼 assert 문은 팍팍 넣어주시면 됩니다.
앞의 군사 이동과 크게 다르지 않습니다.
마지막으로 전쟁준비 기능을 시험합니다.
여기에서는 약간의 설명이 필요합니다.
ISSUE : 전쟁준비로 사기를 높이는 알고리즘이 General.motivateSoliders() 안에 있기 때문에 예상 결과를 정확하게 비교할 수 없습니다.
>> 이런 것을 해결하려면 알고리즘 자체도 별도의 메서드로 추출해야 하는데.. 현 시점에서는 조금 느슨하게 검사합니다.
테스트 케이스는 언제나 항상 빠른 시간안에 정상 동작(green)임을 확인할 수 있어야 합니다.
따라서 아래와 같이 Testing > V0 > 테스트 실행(▷)을 누르고
모든 테스트가 GREEN인지 확인합니다.
이번엔 모든 테스트가 3.0ms 안에 실행되었고
모두 정상입니다.
이제 군사의 다른 기능들도 구현해보도록 하겠습니다.
자바의 테스트 케이스 기능은 정말 편리한 것 같아요.
감사합니다.
2021.8.29