정보공간_1

[4기 강북 송용길] Unit test with JUnit(5) 본문

IT 놀이터/Elite Member Tech & Talk

[4기 강북 송용길] Unit test with JUnit(5)

알 수 없는 사용자 2013. 12. 5. 14:23

안녕하세요 강북멤버십 22-1기 송용길입니다.

 오늘은 마지막 포스팅으로 단위 테스트를 좀 더 체계화하고 구조화 할 수 있는 기법들에 대해 배워보도록 하겠습니다.

 지난 시간에 testCase를 생성하기 전 설정을 하는 화면입니다. 빨간 테두리 안의 체크박스를 보시면 네 개의 메소드를 생성할지 물어 보는 데요. setUp()과 tearDown() 두 가지 함수를 생성하여 어떻게 동작하는 지 보도록 하겠습니다.

위와 같은 코드가 있습니다. test 메소드들은 예를들기 위해 모두 구현해 두진 않았습니다. setUp()과 tearDown()에 모두 자신이 불려진 사실을 알리기 위해 자신의 이름을 콘솔창에 출력하였습니다. 이제 다들 아시다 시피 이 코드가 실행 되면 junit framework에서 test...로 시작하는 함수를 자동적으로 호출하여 testAver()와 testAdd() 그리고 testSub()가 불려진다는 것을 알고 계실 것입니다. 그럼 실행하여 콘솔창을 보도록 하죠.

눈치가 빠르신 분들이라면 이 콘솔창만 보시더라도 어떻게 동작하는 지 이미 알고 계시리라 생각합니다. 맞습니다. setUp()은 test 메소드가 불리기 전에 호출되고 tearDown()은 test 메소드가 불리고 나서 호출되는 녀석입니다. 이러한 메소드들이라면 대략 test 메소드들이 실행되기 전 공통적으로 준비작업이 필요한 것이 있을 경우 그러한 작업을 setUp()에 작성해 두면 훨씬 간결한 코드가 완성 되겠지요.

 다음으로 테스트를 한 쌍으로 묶어서 좀 더 구조화된 테스트를 하고자할 때 사용하는 방법입니다. 바로 Test suite() 메소드를 사용하는 건데요. 위에서 보인 세 가지 테스트 메소드가 있을 경우. 두 가지 테스트 메소드만 사용하고자 할 때 어떻게 구조화하는지 보도록 하겠습니다.

 위와 같이 기존의 코드에 TestSuite를 리턴하는 static 함수를 구현하였습니다. 함수명은 suite입니다. 보시면 suite라는 객체에 test를 넣고 있습니다. 테스트로 넣는 내용은 지금까지 구현했던 AverageTest?Junit클래스 내부의 메소드 이름들을 넣었습니다. 그럼 두 말 할 거 없이 바로 실행 결과를 보죠.

자 보시는 바와 같이 testSub()이 존재함에도 불구하고 제가 넣어둔 testAdd와 testSub만 실행된 것을 확인할 수 있습니다. JUnit Framework에서는 suite()가 있을 경우는 suite()를 호출하여 suite에서 반환하는 테스트 들만 테스트를 진행합니다. 만약 suite()가 없을 시엔 우리가 알다시피 test...로 시작하는 메소드들을 전부 실행하게 되겠죠.

 suite()는 외부에 다른 테스트 클래스까지 불러올 수 있습니다. addTestClass()를 이용하면 서로 다른 테스트를 진행하는 클래스까지 한 번에 실행할 수 있게 됩니다.

 위에서 소개한 기법들을 이용한다면 더욱 더 체계화된 테스트 코드를 작성할 수 있을 것입니다.

 이 포스팅이 멤버십 회원뿐만 아니라 다른 많은 개발자 꿈나무들의 삶을 풍요롭게 만들기를 기원하며 이만 포스팅을 마치도록 하겠습니다. 감사합니다!



Reference

[1]데이비드 토머스, 앤드로 헌트, 실용주의 프로그래머를 위한 단위테스트 with JUnit, 인사이트, 2004