brunch

You can make anything
by writing

C.S.Lewis

[코딩삼국지] #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)


AFTER (AppTest.java)


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

정확히는 

문이 필요합니다. 


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

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


3. test낙양장수들() 


17명인지 확인합니다. 


4. test조조능력치() 


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


5. testProvinceNet() 


6. test군사_이동() 


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

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

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

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

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

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


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

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


7. test군사_수송() 


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


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

 

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


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

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

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


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


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


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

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


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

모두 정상입니다. 


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

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


감사합니다. 

2021.8.29

매거진의 이전글 [코딩삼국지] #8 JUnit의 도입
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari