2017-01-17 8 views
1

У меня есть метод, который я хочу выполнить с помощью модуля, который вызывает Butterknife(Object.class, Activity.class) внутри. Это выглядит следующим образом: методЕдиничный тест - Mockito and Butterknife - Как насмехаться

public void bindActivity(Activity activity) { 
    this.activity = activity; 
    unbinder = ButterKnife.bind(this, activity); 
    init(); 
} 

Тест:

@Test 
public void testBindActivity() throws Exception { 
    Activity activity = mock(Activity.class); 

    tested.bindActivity(activity); 

    assertNotNull(tested.activity); 
    assertNotNull(tested.unbinder); 
    verify(tested).init(); 
} 

Тест бросает NPE в Butterknife класса, который имеет смысла. Я пробовал использовать Mockito.when(), чтобы издеваться и «спрятать» этот прямой звонок на Butterknife.bind() и просто извлечь насмешку Unbinder, но безуспешно. Есть ли какие-либо решения?

ответ

0

Да, в тестовом классе вам нужна переменная экземпляра типа:

import org.mockito.Mock; 
import org.mockito.runners.MockitoJUnitRunner; 
import static org.mockito.Mockito.when; 

@RunWith(MockitoJUnitRunner.class) 
public class SomeTest { 

    @Mock 
    Activity mockActivity; 

    ... 

} 

Затем вам нужно вводить его в класс, который вы тестируете, как:

tested.bindActivity(mockActivity); 

Вы также вероятно, захотите добавить некоторые .when() такие вещи, как:

when(mockActivity.callsSomeMethod()).thenReturn("something"); 

Надеюсь, это то, что вы ищете.

0

Вы не можете издеваться над статическим вызовом метода, как Butterknife.bind() с Mockito.

Вы можете использовать Powermock для этого, но для такого теста вы должны провести инструментальные испытания.

Посмотрите here.