1

jmock サイトのドキュメントを試してみましたが、単に迷ってしまいました。使い方をすでに知っている人にとっては素晴らしいドキュメントのようです。私はその一人ではありません。私はそれらの 1 つを探しています。:)

アプリのすべてのフロント エンドが通信するサービス レイヤーがあります。サービス層は DAO を使用してデータベースと通信し、モデル オブジェクトを返します。データベースへのトリップがないように、これらの DAO に Jmock を使用したいと思います。

したがって、PersonService を実装する PersonServiceImpl と、休止状態で PersonDAO を実装する PersonH​​ibernateDAO があります。人物サービスの例は次のとおりです。

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 を使用して個人サービスを単体テストするにはどうすればよいですか?

4

1 に答える 1

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(...));
   }
}
于 2012-06-05T12:07:03.533 に答える