2012-06-05 5 views
1

jmock 사이트에서 설명서를 시험했지만 간단히 설명하지 않았습니다. 이미 사용법을 알고있는 사람에게는 위대한 문서 인 것 같습니다. 나는 그 중 하나가 아니야. 나는 그 중 하나를 찾고있다. :)jmock에 대한 약간의 지침

나는 내 프런트 엔드가 통신하는 서비스 계층을 가지고있다. 서비스 계층은 DAO를 사용하여 데이터베이스와 통신하고 모델 개체를 반환합니다. 나는 그 DAO들을 위해 Jmock을 사용하여 데이터베이스로의 이동이 없다.

따라서 최대 절전 모드에서 PersonDAO를 구현하는 PersonService 및 PersonHibernateDAO를 구현하는 PersonServiceImpl이 있습니다. 예제 인력 서비스가 뒤 따른다.

public class PersonServiceImpl implements PersonService{ 
    public void changeName(int personId, String firstName, String lastName){ 
     person = getPersonDAO.getPerson(int personId); 
     person.setFirstName(firstName); 
     person.setLastName(lastName); 
     getPersonDAO.update(person); 
    } 
} 

는 어떻게 사람이 서비스를 테스트 장치에 jmock를 사용합니까?

+0

당신이 테스트 할 샘플 PersonServiceImpl 방법을 게시 할 경우 명확하게 대답하는 것이 더 쉬울 수 있습니다. –

답변

3

나는 이것이 작동해야한다고 생각합니다.

public class MyTestClass{ 
    Mockery context = new Mockery(); 

    private PersonServiceImpl personService; 
    private PersonDAO dao; 
    private Person person; 

    @Before 
    public void setup(){ 
     person = new Person(); 

     // set up mock to return person object 
     dao = context.mock(PersonDAO.class); 
     oneOf (dao).getPerson(5); will(returnValue(person)); 

     // create class under test with mock 
     personService = new PersonServiceImpl(dao); 
    } 

    @Test 
    public void myTest(){ 

    // expectations 
    context.checking(new Expectations() {{ 
     oneOf (dao).update(person); 
    }}); 

     // test 
     psersonService.changeName(....); 

    // verify 
    context.assertIsSatisfied(); 
    } 
} 

는 개인적으로, 나는 ... mockito 쉽게 생각

public class MyTestClass{ 

    private PersonServiceImpl personService; 
    private PersonDAO dao; 
    private Person person; 
    private ArgumentCaptor<Person> argCaptor; 

    @Before 
    public void setup(){ 
     person = new Person(); 

     argCaptor = ArgumentCaptor.forClass(Person.class); 

     // set up mock to return person object 
     dao = Mockito.mock(PersonDAO.class); 
     when(dao.getPerson(5).thenReturn(person); 

     // create class under test with mock 
     personService = new PersonServiceImpl(dao); 
    } 

    @Test 
    public void myTest(){ 
     // test 
     psersonService.changeName(....); 

     // verify 
     verify(dao).update(argCaptor.capture()); 
     Person passedPerson = argCaptor.getValue(); 
     assertThat(passedPerson.getFirstName(), equalTo(...)); 
    } 
}