Привет ребята Im используя Robolectric и Mockito и Mockito в модульном тестировании, я пришел к точке, что мне нужно, чтобы проверить данные, зависит от запроса апите вызов.Пробного вызов остального API с помощью Robolectric в тесте единицы
Как вы кодируете, чтобы ваши вызовы Rest api использовали макетные данные при запуске модульного теста?
Внутри моей StockFragment.java, я использую SpringAndroid + Robospice выполнить вызов Rest Api.
Также у меня есть RequestListener (из Robospice) внутри фрагмента, который обновляет интерфейс в фрагменте, если запрос успешный или нет.
Вот мой фрагмент:
public class StockFragment extends RoboDialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_layout, container, false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
displayStockInfo();
}
private void displayStockInfo(){
request = new MyRequest();
request.setQuote(getStock().getSymbol());
lastRequestCacheKey = request.createCacheKey();
((BaseActivity)getActivity()).getSpiceManager().execute(request, lastRequestCacheKey, DurationInMillis.ALWAYS_EXPIRED, new MyRequestListener());
}
private class MyRequestListener implements RequestListener<PseStocksResponse> {
@Override
public void onRequestFailure(SpiceException e) {
//show toast about failure reason ...
}
@Override
public void onRequestSuccess(PseStocksResponse pseStocksResponse) {
//UPDATE UI VIEWS ...
}
}
}
Вот мой класс Robolectric Test.
public class StockFragmentTest {
MyRequest request;
Stock stock;
StockFragment stockFragment;
@Before
public void setUp(){
stockFragment = new StockFragment();
FragmentTestUtil.startFragment(stockInfoFragment);
FragmentTestUtil.startVisibleFragment(stockInfoFragment);
findViews();
}
public void findViews(){
quoteTextView = (TextView)stockInfoFragment.getView().findViewById(R.id.quoteTextView);
nameTextView = (TextView)stockInfoFragment.getView().findViewById(R.id.nameTextView);
...
}
@Test
public void viewShouldNotBeNull(){
assertNotNull(quoteTextView);
assertNotNull(nameTextView);
...
}
@Test
public void showDisplayedInfo(){
//TODO: Assert textview.getText() values here
}
}
Одно решение, которое я имею в виду, это есть TestMode флаг в StockFragment и сделать некоторые условные операторы, которые возвращают данные испытаний, если верно, но я думаю, что есть лучший способ проверить.
Я думаю, что мне нужно слушать запросы Http на моем тестовом классе и поймать этот запрос, а затем предоставить макет данных, но я не уверен, хотя.
Примечание: Robolectric настроен и подтвержден работой и проверен. Хотя я не включил их в фрагмент кода выше. Roboguice также используется в качестве инъекций.
Я хотел бы избежать модификации кода, чтобы знать о присутствии тестируемого –
Это также потерпит неудачу с '' ClassCastException' так FragmentTestUtil' попытается присоединить фрагмент к экземпляру ' Activity' not 'BaseActivity' –
Но прежде чем он сработает с' StubException', потому что вам нужно использовать 'RobolectricTestRunner' –