jMock 을 이용하여 DAO 구현 없이 테스트 하기
JAVA / 2009. 2. 5. 04:39
오늘은 JMock 에 대해서 한번 후집어 보았습니다.
일단 JMock 은 아래 설명과 같습니다.
JMock is a library that supports test-driven development of Java code with mock objects.
Mock objects help you design and test the interactions between the objects in your programs.
영어는 보시는 분에게 해석을 맡기고 저는 바로 jMock 을 사용하는 방법에 대해서 설명 들어갑니다.
jMock 홈페이지는 다음과 같습니다. http://www.jmock.org
1. maven 을 이용하여 JUnit 과 jMock 을 사용할 수 있는 이클립스 프로젝트 만들기
일단 지난 포스트에서 설치했던 maven 을 기준으로 작업을 하였습니다.
(이전 포스트 링크 : Apache Maven 으로 Eclipse 프로젝트 만들기)
ㅁ 새로운 메이븐 프로젝트를 생성합니다.
ㅁ JUnit 과 jMock 을 사용하기 위해 생성된 pom.xml 을 아래와 같이 수정합니다.
- http://www.jmock.org/maven.html 참조
ㅁ 해당 프로젝트를 이클립스 프로젝트로 변환합니다.
ㅁ 생성된 프로젝트를 이클립스에서 불러옵니다.
일단 지난 포스트에서 설치했던 maven 을 기준으로 작업을 하였습니다.
(이전 포스트 링크 : Apache Maven 으로 Eclipse 프로젝트 만들기)
ㅁ 새로운 메이븐 프로젝트를 생성합니다.
mvn archetype:create -DgroupId=kr.co.vicki.jmock -DartifactId=vicki-jmock
ㅁ JUnit 과 jMock 을 사용하기 위해 생성된 pom.xml 을 아래와 같이 수정합니다.
- http://www.jmock.org/maven.html 참조
ㅁ 해당 프로젝트를 이클립스 프로젝트로 변환합니다.
cd vicki-jmock
mvn eclipse:eclipse
mvn eclipse:eclipse
ㅁ 생성된 프로젝트를 이클립스에서 불러옵니다.
2. Service Layer 구현 및 DAO interface 정의
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/User.java
로그인한 사용자의 정보를 가지고 있는 User 클래스
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/ILoginDAO.java
DAO 인터페이스
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/UserNotFoundException.java
사용자가 없을 경우에 대한 익셉션
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/UnmatchedPasswordException.java
패스워드가 맞지 않을 경우에 대한 익셉션
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/ILoginService.java
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/LoginServiceImpl.java
ILoginService 구현체
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/User.java
로그인한 사용자의 정보를 가지고 있는 User 클래스
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/ILoginDAO.java
DAO 인터페이스
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/UserNotFoundException.java
사용자가 없을 경우에 대한 익셉션
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/UnmatchedPasswordException.java
패스워드가 맞지 않을 경우에 대한 익셉션
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/ILoginService.java
/vicki-jmock/src/main/java/kr/co/vicki/jmock/blog/LoginServiceImpl.java
ILoginService 구현체
3. jMock 을 이용한 테스트 코드 작성
/vicki-jmock/src/test/java/kr/co/vicki/jmock/blog/LoginServiceImplTest.java
소스에 달린 주석을 보시면 아시겠지만, jMock 이 하는 일은 인터페이스를 가지고 mock 오브젝트를 생성한 후 오브젝트의 메소드의 파라미터로 들어올 값을 예상하여 결과값을 반환해준다던가, 메소드의 호출 회수를 정의하는 역할을 하게 됩니다. Expectations Anonymous 클래스안의 초기화 블럭에서 예상되는 로직에 대한 정의를 하게 됩니다.
조금더 자세한 구문을 확인하고 싶다면 jMock 2 Cheat Sheet 를 확인하시기 바랍니다.
/vicki-jmock/src/test/java/kr/co/vicki/jmock/blog/LoginServiceImplTest.java
소스에 달린 주석을 보시면 아시겠지만, jMock 이 하는 일은 인터페이스를 가지고 mock 오브젝트를 생성한 후 오브젝트의 메소드의 파라미터로 들어올 값을 예상하여 결과값을 반환해준다던가, 메소드의 호출 회수를 정의하는 역할을 하게 됩니다. Expectations Anonymous 클래스안의 초기화 블럭에서 예상되는 로직에 대한 정의를 하게 됩니다.
조금더 자세한 구문을 확인하고 싶다면 jMock 2 Cheat Sheet 를 확인하시기 바랍니다.
처음에 예제를 보구서 색다른 문법인지 알고 혼란을 겪었었는데... 알고보니 메소드명과 괄호를 한칸 띄었을 뿐이였답니다...
참~ 쉽죠잉... 하악...