2013-05-06 3 views
4

У меня есть интерфейс, например:Тест метод, который вызывает другой метод объекта в Mockito

interface MyService { 
    void createObj(int id) 
    void createObjects() 
} 

Я хочу, чтобы проверить реализацию метода createObjects, который имеет тело, как:

void createObjects() { 
    ... 
    for (...) { 
    createObj(someId); 
    } 
} 

Я уже опробовали createObj(id):

@Test public void testCreate() { 
    //given 
    int id = 123; 
    DAO mock = mock(DAO.class); 
    MyService service = new MyServiceImpl(mock); 

    //when 
    service.createObj(id); 

    //verify 
    verify(mock).create(eq(id)); 
} 

Так что я не хочу, чтобы повторить все тестовые примеры для него в тесте для createObjects.

Как я могу убедиться, что другой метод реального объекта был вызван помимо того, который я тестирую?

ответ

7

Используйте шпиона:

MyService myService = new MyServiceImpl() 
MyService spy = spy(myService); 
doNothing().when(spy).createObj(anyInt()); 

// now call spy.createObjects() and verify that spy.createObj() has been called 

Это описывается, как и все остальное, в the api doc.

+0

спасибо. Я использую именно это. Но документы говорят, что это может «пахнуть», поэтому я думаю о том, почему это так и как этого избежать :) – glaz666

+0

Это именно то, для чего нужны шпионы. «Запах» не обязательно означает, что что-то не так; только что-то ** может быть ошибочным. В этом конкретном случае это правильная вещь. –

Смежные вопросы