Привет, ребята, я использую Robolectric и Mockito и mockito в модульном тестировании, я пришел к выводу, что мне нужно проверить данные, которые зависят от вызова запроса API.
Как вы кодируете, чтобы ваши вызовы 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
, а неBaseActivity
- person Eugen Martynov   schedule 04.02.2015StubException
, потому что вам нужно использоватьRobolectricTestRunner
- person Eugen Martynov   schedule 04.02.2015