EasyMock으로 클래스의 Mock 객체 만들기
방명록에서 '제도관퐈터'님의 질문으로 인해 오랜만에 EasyMock을 아주 살짝 살펴봤습니다. 질문은 JFrame의 Mock객체가 안 만들어진다는 것이었습니다. 그래서 해봤습니다.
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import org.junit.Test;
public class What {
@Test
public void createJFrameMock() throws Exception {
JFrame mockFrame = createMock(JFrame.class);
assertNotNull(mockFrame);
}
}
안 되는 군요. 에러 메시지를 읽어보니까 원인도 보여줍니다. 인터페이스가 아니니까 못 만든다는 것입니다. 이걸 보셨으면 저한테 굳이 질문을 하셨을까 싶지만... 그래도 뭐 심심하니까 검색해봤습니다.
easymock createmock class 라고 입력하면, Toby'epril 블로그의 내용 중에 하나가 검색 됩니다. Hibernate Dao Test 코드 만드는 것과 관련된 Toby님의 글입니다.
거기에 보면 이지목 확장 클래스를 사용해서 HibernateTemplate의 mock객체를 만들었다는 이야기가 나오고 소스코드도 있습니다.
그래서 EasyMock 다운로드 사이트에 가봤더니 정말고 확장 클래스라는것이 있었습니다.
테스트 코드를 바꿨습니다.
import static org.easymock.classextension.EasyMock.*;
import javax.swing.JFrame;
import org.junit.Test;
public class What {
@Test
public void createJFrameMock() throws Exception {
JFrame mockFrame = createMock(JFrame.class);
assertNotNull(mockFrame);
}
}
테스트 코드는 실패합니다. 왜냐면 Cglib을 필요로 합니다. 인터페이스가 아니라 클래스의 프록시를 만들려면 필요한 라이브러리죠. Cglib은 spring 2.5 lib 폴더에 있는 것을 사용했습니다.
gk63.jar
저걸 추가해주고 다시 테스트를 하면 테스트는 통과합니다.
이제 클래스의 Mock 객체를 만들어서 사용하실 수 있습니다.