2015-06-13 4 views
2

Я хочу издеваться над интерфейсом DAO, используемым в шаблоне построителя, как показано ниже. Однако, когда я запускаю тест ниже, он передает, что мой макет-объект никогда не вызывается. Что я делаю не так?Тестирование модульного интерфейса с помощью Mockito

public class DBContent { 
    ... 

    public static class Builder { 

     DAO dao = new DAO(); 
     ... 

     public Builder callInsert() { 
      ... 
      long latest = dao.insert(); 
      ... 
     } 
    } 
    ... 
} 

@RunWith(MockitoJUnitRunner.class) 
public class DBContentTest { 

    @Mock 
    DAO dao; 

    @Test 
    public void test() { 
     when(dao.insert()).thenReturn(1111L); 
     DBContent db = DBContent.db() 
       .callInsert() 
       .callInsert() 
       .callInsert() 
       .build(); 
     verifyZeroInteractions(dao); 
    } 
} 
+4

Вы создаете ложный DAO в своем тесте, но создатель, который вы тестируете, не использует его. Он создает свой собственный DAO. Вы должны передать макет DAO в качестве аргумента при построении построителя. Узнайте об инъекции зависимостей. –

ответ

1

Вместо этого используйте PowerMockito. Там вы можете определить, что всякий раз, когда вы вызываете конструктор DAO, возвращайте мой издеваемый объект вместо того, чтобы возвращать фактический объект DAO.
Обратитесь к this, чтобы узнать, как использовать PowerMockito.

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