简体   繁体   中英

Is it possible to verify tested object method call with Mockito?

I' ve got some business logic class:

public class SomeService {
    public void doFirst() {}

    public void doSecond() {
        doFirst();
    }
}

and test for it:

public class SomeServiceTest {

    private SomeService service;

    @Before
    public void setUp() {
        service = new SomeService();
    }

    @Test
    public void doSecond_someCondition_shouldCallFirst() {

        // given
        ...

        // when
        service.doSecond();

        //then
        how to verify doFirst() was called? 
    }
}

How to verify doFirst() was called not on mock, but real service?

I wonder why you want to test, what method your method under tests invoke. Sounds pretty much like whitebox testing to me.

In my opinion, you want to verify the outcome of the invocation and not the way to get there, as this might easily change (ie when refactoring).

So if the outcome of doSecond() is the same as doFirst() you could write a test for doFirst() and use the same test (ie set of assertions) for testing doSecond().

But if you really want to test, whether doFirst() has been invoked by doSecond() you could wrap your service in a spy and then call the verification on the spy:

//given
SomeService service = new SomeService();
SomeService spy = Mockito.spy(service);
//when
spy.doSecond();
//then
verify(spy).doFirst();

It sounds like you want to avoid the real doFirst being called in your test? if so, try this...

  //given
    boolean firstCalled = false;
    SomeService fakeService  = new SomeService {
          @Override 
          public void doFirst() {
             firstCalled = true;
          }
    }
 //when
 fakeService.doSecond();

  // then
  assertTrue(firstCalled);

This testing/mocking technique is called 'subclass and override' for obvious reasons.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM