2012-06-05 27 views
1

我试过了关于jmock站点的文档,我简直失去了知识。对于已经知道如何使用它的人来说,这似乎是很棒的文档。我不是其中之一。我正在寻找其中的一个。 :)有关jmock的一点指导

我有一个服务层,所有前端到我的应用程序进行通信。服务层使用DAO与数据库通信并返回我的模型对象。我想为这些DAO使用Jmock,以便不会访问数据库。

所以,我有PersonServiceImpl实现PersonService和PersonH​​ibernateDAO实现hibernate中的PersonDAO。示例人服务如下。

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(...)); 
    } 
}