Mocking void method with EasyMock and Mockito

Hello, I would like to know what works best for mock void methods, for example: I have a PersonManager under the test, and then I have a dao that taunts.

class PersonManager { PersonDao dao... PersonManager(PersonDao dao)... Preson find(String person)... void delete(String person)... } class PersonManagerTest { Map<String, Person> persons ..... = "person1", "person2", "person3"; PersonDao mock... PersonManager manager = new PersonManager(mock); //easy one @Test public void shouldReturnExistingPerson() { expect(mock.find("person1").andReturn(persons.get(0)); Person result = manager.find("person1"); // replay and verify logic } //but what should I do here? @Test public void shouldDeleteExistingPerson() { //should I remove a person from testing Map holding test data? or what am I doing wrong } } 

So the return test method was simple, but how to set up the void method? Thank you for your suggestions, and examples of Mcokito are also welcome. }

+4
source share
4 answers

It all depends on what you are trying to verify.

In mockito, if you only want to verify that the DAO deletion method is called with the correct parameter, then verify is what you want.

I would suggest that this is exactly what you need, since your unit test for PersonManager should not test PersonDao .

+4
source

With a lightweight macro, you don't have to wrap the void functions around expect (). You just need to do something like:

 obj = createMock(...) obj.someVoidMethod(); replay(obj); ... verify(obj); 
+6
source

When deleting something, I suggest returning the object you just deleted. It makes testing much, much simpler and allows you to do things after removal (for example, displaying notifications, logging, etc.). I think most (all?) Java collections do this.

+1
source

Mockito provides a static verify method that can verify when you call a method, even those that have an invalid return type. For your sample code, the following mockito code should work:

 // Put this among your import statements import static org.mockito.Mockito.* class PersonManagerTest { private PersonManager manager; // SUT private Map<String, Person> mockedPersons; private PersonDao mockDao; // Don't forget to setup from scratch for each test @Before public void setup() { mockDao = mock(PersonDao.class); // mockito mock method mockedPersons = new HashMap<String, Person>(); for (int i=1; i<=3; i++) { mockedPersons.put("person"+i, mock(Person.class)); } manager = new PersonManager(mockDao); } // setup dao to return a mocked person private void whenPersonIsAdded(int i) { Person personToReturn = mockedPersons.get("person"+i); when(mockDao.find("person"+i)).thenReturn(personToReturn); } @Test public void shouldReturnExistingPerson() { whenPersonIsAdded(1); Person expectedPerson = mockPerson; Person actualPerson = manager.find("person1"); assertEquals(expectedPerson, actualPerson); } @Test public void shouldDeleteExistingPerson() { String expectedPersonString = "person1"; manager.delete(expectedPersonString); verify(mockDao).delete(expectedPersonString); } } 

Hope this helps.

0
source

All Articles