Mocking void method with EasyMock and Mockito

19,930

Solution 1

It depends entirely on what you're trying to test.

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

I would suggest that this is exactly what you want since your unit test for PersonManager should not be testing PersonDao.

Solution 2

With easy mock, you don't need to wrap void functions around expect(). You just need to do something like:

obj = createMock(...)
obj.someVoidMethod();
replay(obj);
...
verify(obj);

Solution 3

When deleting something, I suggest returning the object you just deleted. It makes testing much, much easier and allows doing things after you deleted (e.g. showing notice, logging, etc). I think most (all?) Java collections are doing so.

Share:
19,930
Jarek
Author by

Jarek

Updated on June 27, 2022

Comments

  • Jarek
    Jarek almost 2 years

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

    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 testing method with return was easy but how to toset void method? Thank you for suggestions, and Mcokito examples are welcomed too. }

  • Sean Patrick Floyd
    Sean Patrick Floyd almost 13 years
    About most / all. All Java collections inherit from the same interface, so if one returns the deleted object, all do.
  • Alan Escreet
    Alan Escreet almost 13 years
    This is all true and correct, however very slightly misses the intent of the test (as I understand it). Testing if PersonManager.delete() returns a Person instance is not the same as testing if it calls PersonDao.delete().
  • Alan Escreet
    Alan Escreet almost 13 years
    Again true, but then you're testing if it returns true/false, not that the DAO is being called with the correct parameter.
  • Arunchunaivendan
    Arunchunaivendan about 7 years
    The link is broken.