일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- BAM
- 가상화
- Neural Network
- SSM
- 구글 앱 엔진
- 삼성전자 소프트웨어멤버십 SSM
- 인공지능
- 고려대학교
- 동아리
- Python
- 물걸레로봇청소기추천
- 신경회로망
- Google App Engine
- NarwalFreo
- 나르왈프레오
- 파이썬
- 물걸레자동세척로봇청소기
- hopfield network
- 멤버십
- 패턴 인식
- Friendship
- Bidirectional Associative Memory
- 삼성
- 신경망
- 증강현실
- 갤럭시탭S8울트라
- 패턴인식
- 빅데이터
- 삼성소프트웨어멤버십
- 하이퍼바이저
- Today
- Total
정보공간_1
[4기 강북 송용길] Unit test with JUnit(3) 본문
안녕하세요.
강북 멤버십 22기 송용길입니다.
지난 시간에는 실제로 자바 코드를 활용하여 단위 테스트를 진행해 보았습니다. 지난 번 코드에서는 에러가 날 경우 콘솔창에 메시지를 띄워 에러를 확인하는 방법을 사용하였습니다. 이런 경우는 코드의 성공 실패를 직관적으로 확인하기가 힘듭니다. 이를 위해 사용하는 것이 바로 JUnit Framework인데요. 오늘은 그 JUnit을 이용하여 테스트 코드를 작성해 보도록 하겠습니다.
우선 테스트 코드를 작성하기 위한 java파일을 추가해보도록 합시다.
일단 [프로젝트 이름] 우클릭 -> [new] -> JUnit Test Case를 선택합니다. eclipse Java EE 환경에서는 JUnit을 지원합니다.
이 자바 파일의 이름을 짓습니다. 앞서 말씀드린대로 보통 테스트 클래스의 이름은 테스트하고자 하는 클래스의 이름 뒤에 Test를 붙여 테스트 클래스라 명시합니다. 그리고 Class under test 항목의 browse 버튼을 클릭합니다.
테스트 할 항목의 클래스 이름을 검색하면 본 프로젝트의 패키지 내에 있는 클래스를 eclipse가 찾아줍니다. 결과가 나오면 ok를 선택 후 Next >를 눌러줍니다.
다음은 테스트할 메소드를 선택하는 창입니다. Average 클래스 내에 구현한 메소드는 aver(double[]) 뿐이라 aver 메소드를 체크한 후 Finish 버튼을 눌러줍니다. 그러면 아래와 같은 코드가 생성됩니다.
위에서 보시다시피 메소드 선택항목에서 aver 메소드를 선택하고 나니 testAver()라는 테스트 메소드가 생성되 었습니다. 현재는 fail이란 메소드에 메시지가 "아직 구현 안됨"이라고 나와있네요. 한 번 테스트를 실행해 보겠습니다. 실행하는 방법은 보통의 자바 프로그램과 마찬가지로 run 버튼을 눌러줍니다.
위와 같은 테스트 실행결과가 나왔습니다. 언뜻 보기에도 이 테스트가 실패했다고 느껴지시나요? 하나하나 찬찬히 뜯어보면 Runs: 1/1은 총 한개의 테스트가 실행되었다는 것을 의미합니다. Errors 테스트 중 에러가 난 테스트의 개수를 보여주고, Failures는 실패한 테스트의 개수를 보여줍니다. Errors와 Failures의 차이가 무엇인지 궁금한 분들이 계실 것 같습니다. Error는 테스트 도중 JVM이나 프로그램 코드 내에서 예외를 던질 시, 말 그대로 프로그램이 에러가 날 경우를 뜻하고, Failures는 테스트 메소드의 결과가 내가 기대한 것과 같은지 비교해주는 단정 메소드(assert method)에서 같지 않다고 판단할 경우 failures를 카운트 하게 됩니다. 위의 코드에서는 fail 메소드에 의해서 failures가 하나 추가 된 경우입니다.
그렇다면 실제로 testAver()를 구현해 보도록 하겠습니다.
자 모든 테스트 코드 작성이 끝이 났습니다. 굉장히 간단하죠? 지난 시간에 구현한 테스트 코드와 비교해 보면 매우 짧아 지고 if문도 없어진 것을 볼 수 있습니다. JUnit Framework에서는 메소드 이름 앞에 test가 붙은 메소드를 골라내어 자동으로 실행해 줍니다. 그렇기 때문에 별도의 main문은 필요하지 않습니다. 그리고 또 생소한 것 하나가 바로 assertEquals라는 단정 메소드 인데요. 메소드로 넘겨주는 인자만 보더라도 대충 감이 오실 거라 생각이 듭니다. 이 함수는 기대값(expected)과 실제값(actual)을 비교하여 같으면 함수를 정상종료하고 같지 않은 경우 일정 예외를 던져 Failures를 카운트 하게 됩니다. 마지막 인자 값으로 delta 값이 있는데, delta는 double형 인자 끼리의 비교시 어느 정도의 오차를 허용할지 그 오차 범위를 정해주는 인자입니다. 위의 코드를 예로 들면 expected와 actual의 오차를 0으로, 즉 약간의 오차도 허용하지 않겠다는 것입니다. 자 그럼 다시 실행해 보도록 합시다.
위의 결과와는 다른 결과가 보여집니다. 딱 보더라도 이 테스트 결과는 성공이다. 라고 말해주는 것 같네요.
자 이렇게 지금까지 JUnit을 이용하여 코드를 테스트 해 보았습니다. 이 전에 작성하였던 테스트 코드보다 훨씬 간단하고 직관적으로 변하였습니다. 하지만 아직까지 JUnit의 모든 면을 보여드리진 못하였습니다. 다음 포스팅에서는 JUnjit Framework이 제공하는 단정 메소드들과 여러 테스트 기법에 대해 알아보도록 하겠습니다. 오늘 포스팅한 이 자료가 여러분(개발자)분들의 삶을 윤택하게 만드는데 일조하길 바랍니다. 감사합니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[4기 수원 전낙현] 안드로이드 기반 디바이스의 디지털 포렌식 #2 (0) | 2013.12.02 |
---|---|
[4기 수원 전낙현] 안드로이드 기반 디바이스의 디지털 포렌식 #1 (0) | 2013.12.02 |
[4기 신촌 박영웅] Android Application Stealth Update (2) (0) | 2013.12.02 |
[4기 강남 안태형] Java Class Loader #2 (0) | 2013.12.01 |
[4기 강남 안태형] Java Class Loader #1 (0) | 2013.12.01 |