2015-09-15 3 views
2

У меня есть обычай ListView сказать CustomListView:Mocking findViewById реакция с Robolectric и Mockito

В фрагменте есть:

<com.custom.CustomListView 
    android:id="@+id/custom_listview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

и в источнике этого фрагмента, у меня есть

private CustomListView mCustomListView; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    mContext = getActivity(); 

    mCustomListView = mContext.findViewById(R.id.custom_listview); 
} 

Затем существует некоторый метод:

public void doSomethingOnReceivingData(Data data) { 
    mCustomListView.someCustomMethod(data); 
} 

Я хочу написать тест для метода doSomethingOnReceivingData(Data).

Я не могу понять, как издеваться над списком, чтобы я мог продолжить тест (ArgumentCaptors и прочее)?

+0

Откуда 'mContext' идет? –

+0

@EugenMartynov mContext - это 'getActivity()'. Я обновил вопрос. –

+0

Добавлен ответ с информацией, которую вы предоставили –

ответ

1

Я бы предоставил локальный доступ к полевому полевому полевому полевому пакету и издевался над ним непосредственно в тесте. Для нашего приложения это уже пакет доступен, так как мы используем нож для масла

1
@RunWith(MockitoJUnitRunner.class) 
public class MainActivityFragmentTest { 

    @Mock 
    private CustomListView mCustomListView; 

    @InjectMocks 
    private MainActivityFragment fragment; 

    @Test 
    public void doSomethingOnReceivingData_callsCustomListView() { 
     final String data = "data"; 

     fragment.doSomethingOnReceivingData(data); 

     verify(mCustomListView).someCustomMethod(eq(data)); 
    } 

} 
+0

'eq' matcher не требуется. Я буду исследовать аннотацию @ @ InjectMocks. Благодаря! –

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