Tagged

EasyMock

A collection of 23 posts

DbUnit

Why OSAF 1. 테스트 코드를 익힐 수 있습니다.

OSAF를 공개한지 한 달이 아직 안 됐습니다. 10월 23일에 공개했었죠. 지금까지 약 200에 가까운 다운로드를 기록하고 있지만, 전혀… 아무런… 반응이 없다는 것에는 가히 놀라울 뿐입니다. 그냥 제가 쓴 글의 댓글 몇 개 정도 뿐의 관심이 저에게 한 편으로는 아쉬움으로 또 다른 한 편으로는 오기로 다가옵니다. 완전 최첨단 프레임워크인

EasyMock

맥 애플리케이션 토렌트와 P2P 프로그램

http://www.mac-torrents.com/index.php 위 사이트에서 맥 애플리케이션과 관련된 토렌트를 구할 수 있습니다. http://www.limewire.com/download/ 저기서 받은 토렌트를 위의 limewire라는 무료 P2P(윈도우의 당나귀급) 프로그램에 드래그 앤 드랍을 하면 알아서 다운로드 해줍니다. 위 두 개의 프로그램 조합으로 이제 원 없이 맥을 즐길 수 있게 되었습니다.

andStubAnswer()

EasyMock - Using Stub Behavior for Methods

EasyMock으로 생성한 Mock을 마치 Stub처럼 사용할 수 있습니다. 이 말이 무슨 말이냐면… Mock은 Stub과 달리 예측이라는 개념이 추가되어 있습니다. 따라서 예측 대로 Mock이 수행되지 않으면 AssertionError가 발생하는데, Stub은 그런 개념이 없고, 따라서 구현해둔 메소드가 호출 되든 말든 상관이 없습니다. 다시 돌아가서 Stub 처럼 사용한 다는 것은 Mock으로 레코딩 한

anyInt()

EasyMock - Flexible Expectations with Argument Matchers

레코딩을 할 때, 테스트가 의존하는 메소드에 넘겨주는 아규먼트의 폭을 유동적으로 설정할 수 있습니다. 그때 사용하는 것들이 Argument Matcher입니다. 기본으로 제공해주는 것들을 사용할 수도 있고, 사용자가 새것을 정의해서 추가하여 사용할 수도 있습니다. 예를 들어.. memberService의 foo 메소드에 어떤 값을 넘겨주던 memberDao의 foo 메소드에는 integer 값이 넘어간다고 했을 때.. 어떻게 레코딩 해야할까요.

checkOrder()

EasyMock - Strict Mocks, Switching Order Checking On and Off

createMock()을 사용해서 얻어낸 Mock 객체는 기본적으로 메소드를 호출하는 순서를 확인하지는 않습니다. 그런데 경우에 떄라서는 메소드가 호출되는 순서가 중요할 수 있는데, 그럴 땐는 두 가지 방법이 있습니다. 1. Mock객체를 생성할 때 createMock()이 아니라, createStrickMock()을 호출하여 mock 객체를 생성하면, 순서까지 확인합니다. MemberDaoMock = createStrickMocek(MemberDao.class); 2. Mock객체에 레코딩을 시작하기

anyTimes()

EasyMock - Relaxing Call Counts

테스트 대상이 호출하는 메소드의 호출 횟수를 예측할 때 횟수의 범위를 지정해서 어느정도 테스트에 여유를 줄 수 있습니다. 예를 들어, MemberServiceImpl의 add를 호출할 때, 이미 add하려는 Member 데이터의 email이 DB에 존재하는지 확인하기 위해서, DB에 findByEmail()을 한 번 이상 호출 한다고 가정하겠습니다. 이 메소드는 정확히 몇 번 호출이 될지는 모릅니다.(사실

EasyMock

EasyMock - Changing Behavior for the Same Method Call

같은 메소드가 여러번 호출 될 때, 매번 예측되는 결과가 다르다면.. memberDao.add(member); // Member 객체가 무사히 저장된다.memberDao.add(member); // 예외가 발생한다. 이런 경우에 그냥 fluent interface로 계속해서 andReturn() 이나 andThrow()를 호출하여 recording 할 수 있습니다. memberDao.add(member)    .andReturn(resultMember);    .adndThrow(new DuplicatedEmailException()); 테스트

andAnswer()

EasyMock - Creating Return Values or Exceptions

리턴값이나 예외를 실제 메소드가 호출되는 시점에 만들고 싶을 수 있는데 그럴 때는 andAnswer()을 사용합니다. expectLastCall().andAnswer(new IAnswer<Object>() { public Object answer() throws Throwable { ((User) getCurrentArguments()[0]).setUserId(1); return null; }}); 이 전 글들에서 사용했던 andReturn()이나, andThrow()의 인자로는 미리 만들어 둔 객체들을 넘겨줬다면, andAnswer()에서는

andReturn()

EasyMock - Specifying Return Values

테스트의 대상이 사용하는 Mock의 메소드가 반환할 값이 필요한 경우에 다음과 같이 할 수 있습니다. 1. 예상되는 메소드 호출을 expect() 메소드로 감싸기.2. andReturn(Object returnValue) 사용해서 예상되는 리턴값을 expect() 메소드 뒤에 .으로 이어서 호출하기 public void testVoteAgainstRemoval() { mock.documentAdded("Document"); // expect document addition // expect to be asked to vote for

EasyMock

EasyMock - Expecting an Explicit Number of Calls

같은 메소드 호출을 여러번 하는 경우 그런 행위를 녹화하기 위해서, 메소드를 여러번 호출할 수도 있지만. public void testAddAndChangeDocument() { mock.documentAdded("Document"); mock.documentChanged("Document"); mock.documentChanged("Document"); mock.documentChanged("Document"); replay(mock); classUnderTest.addDocument("Document", new byte[0]); classUnderTest.addDocument("Document", new byte[0]); classUnderTest.addDocument("Document", new byte[0]

EasyMock

EasyMock으로 클래스의 Mock 객체 만들기

방명록에서 ‘제도관퐈터’님의 질문으로 인해 오랜만에 EasyMock을 아주 살짝 살펴봤습니다. 질문은 JFrame의 Mock객체가 안 만들어진다는 것이었습니다. 그래서 해봤습니다. import javax.swing.JFrame;import static org.easymock.EasyMock.*;import static org.junit.Assert.*; import org.junit.Test; public class What {     @Test    public void createJFrameMock() throws

EasyMock

Spring MVC 리팩토링 2

이전 글에서 Controller 단위 테스트를 변경하여 Controller 수정에 성공했습니다.이번에는 MemberService를 단위 테스트 해서 MemberService의 구현을 수정하겠습니다. 이번에는 MemberService의 테스트가 만들어져 있지 않은 것을 확인했습니다. 만들어야겠습니다. public class MemberServiceImplTest {     private MemberService memberService;    private MemberDao memberDao;     @Before    public void setUp() {     

Controller 테스트

AbstractModelAndViewTests 사용하여 Controller 테스트하기

컨트롤러의 주된 목적은 handleRequest안에 Request와 Respnse 객체를 넣어서 결국 ModelAndView 객체를 반환하는 것입니다. 따라서 다음과 같은 결론을 조심스래 내놓을 수 있습니다. Controller 테스트 == ModelAndView 테스트 아직은 TDD에 익숙하지도 않고 테스트 클래스를 어떻게 작성해야 할지도 모르기 때문에;; 일단은 구현을 하고 그 것을 테스트 하는 방법을 익히는 식으로 공부하고 있습니다. 먼저 Controller

Controller 테스팅

Testing Controller

매우 간단한 Controller를 테스트 하겠습니다.앞에서 만든 MultiActionController를 테스트 하는 코드를 작성하겠습니다. 앞에서 작서해준 컨트롤러는 다음과 같이 View이름만 넘겨 주도록 만든 Stub 형태 입니다.     public ModelAndView list(HttpServletRequest request, HttpServletResponse response){        return new ModelAndView(“issue/list”);    } 이 녀석을 EasyMock과 spring-mock.

EasyMock

EasyMock을 사용한 Service 계층 테스트2

참조 : http://www.easymock.org/EasyMock2_2_Documentation.html reset() 메소드 활용하기이 전글에서 원래 하나의 테스트 메소드에 넣어뒀던 내용을 세 개의 메소드로 쪼개두었습니다. 의도적으로 쪼갠 것은 아니였고 다만 expect() 메소드를 사용하여 MemberDao의 get() 메소드를 설정해 두었는데 Mock 객체의 특정 메소드를 여러 번 재정의 할 수가 없어서 에러가 발생했습니다. 이럴 때

EasyMock

EasyMock을 사용한 Service 계층 테스트1

참조 : http://www.easymock.org/EasyMock2_2_Documentation.html 패키지 구조는 다음과 같습니다. MemberService를 구현하려는데 아직 MemberDao는 구현되어 있지 않고 MemberDao라는 인터페이스만 존재합니다.이 때 MemberServiceImpl 클래스를 TDD로 개발하기 위해 다음과 같이 작성했습니다. public class MemberServiceImplTest {          MemberService memberService;        MemberDao mockMemberDao;  

EasyMock

Easymock 연습하기 3탄

Easymock 연습하기 2탄에서는 mock 객체를 이용해서 void 형태의 메소드를 테스트 했습니다. 즉 올바른 인자가 들어가는지 확인을 한것입니다. 이번에는 나오는 값도 테스트를 해보겠습니다. 나오는 값을 테스트하기 위해서는 expect라는 메소드와 andReturn메소드를 사용합니다. 소스보기 [#M_ more.. | less.. | @Test    public void get(){        final Member member = new Member();  

EasyMock

Easymock 연습하기

http://www.easymock.org/Downloads.html 위 링크에서 Easymock을 다운로드 합니다. 압축을 풀면 easymock.jar 파일이 있습니다. 이것을 Eclipse 프로젝트에 추가합니다. 그리고 JUnit 도 추가합니다. JDK는 5.0 이상에서 작동합니다. (easymock 버젼 2 부터 그런 것 같습니다.) MemberRepositoryImpl 클래스를 테스트 하기 위한 코드 입니다. import static org.easymock.EasyMock.*; import