2011-01-13 3 views
4

예상되는 (정의 된) 메서드 호출에 대해 EasyMock에서 null을 반환하는 데 문제가 있습니다.EasyMock은 예상 메서드에 대해 Null을 반환합니다.

mock = EasyMock.createMock(DAO.class); 

모의는 단위 테스트에서 설정 한 조롱 객체의

창조.

expect(mock.update(myObj).andReturn(myObjUpdated).once(); 
replayAll(); 
service.setDao(mock); 
service.processData(myObj); 
verifyAll(); 

processData 방법은 단순히 여기

MyObject objUpdated = dao.update(myObj); 

를 호출하는 모의가에서 건설되고있는 인터페이스입니다.

public interface DAO { 
    public <ENTITY> ENTITY update(ENTITY entity); 
} 

나는이 문제를 일으키는 것으로 혼란 스럽다. 나는 'obj'가 내가 단위 테스트에서 정의한 것과 같은 대상이라는 것을 확인했다. 나는 또한 조롱하는 다른 방법들과 함께이 문제 (내가 알고있는)를 경험하지 못했다.

전달할 객체에 문제가있을 수 있습니까?

미리 감사드립니다. 다른 정보가 도움이 될지 모르겠습니다.

편집 :

public class TestMyService extends EasyMockHelper {...} 

답변

7

그래서 내 주요 문제가되지 기대와 심지어의 창조임을 밝혀이 테스트 클래스 (그리고 그것을 밝혀 내 오해가 시작된 곳) 모의 객체. 내 테스트에서 기능을 확장하는 EasyMockSupport 클래스에 대한 근본적인 오해가있었습니다. 이것은 문서에서 잘 다루어지지는 않지만 예제를 조금 더 자세히 들여다 보면 나의 오류가 명백해진다.

EasyMockSupport 클래스는 내 테스트 클래스가 replayAll(), verifyAll() 및 resetAll()과 같은 메서드에 액세스 할 수있게합니다. 이제는 각각의 mock 객체를 수동으로 제어하는 ​​것에 대해 걱정할 필요가 없습니다. 그러나 설명서에서 언급하지 못한 것은 EasyMockSupport 클래스에서 제공하는 메서드를 사용하여 Mock 객체를 만들어야 컨트롤을 제대로 등록 할 수 있다는 것입니다. (이 말은 총체적으로 이해가된다. 나는 어디서나 그것을 읽지 않고있다). API을 보면 EasyMockSupport 클래스는 EasyMock 클래스에서 일반적으로 정적으로 사용하는 모든 메소드 (예 : createMock (Class 클래스))를 하위 클래스에 제공합니다. 따라서 업데이트 된 코드

public class TestMyService extends EasyMockSupport { 
    private MyService service; 
    private MyDao dao; 

    private MyObject myObj; 

    @Before public void setUp() { 
     service = new MyService(); 

     // THIS IS THE KEY 
     mock = createMock(IDao.class); //CORRECT 
     // mock = EasyMock.createMock(IDao.class); //WRONG 

     service.setDao(mock); 
     myObj = new MyObject("expectedData"); 
    } 
    @After public void tearDown() { 
     verifyAll(); 
    } 
    @Test public void testMyService() { 
     expect(mock.update(myObj)).andReturn(myObj); 
     replayAll(); 
     service.myService(myObj); 
    } 
} 

public class MyService() { 
    private IDao dao; 
    public void setDao(IDao dao) {this.dao = dao; } 
    public MyObject myService(MyObject myObj) { 
     return dao.update(myObj); 
    } 
} 
+0

다른 '키'에 대한 같은

는 EasyMockSupport하여 테스트 케이스 클래스를 확장하는 것입니다. – d0nut

관련 문제