こんにちは皆さん、単体テストで Robolectric と Mockito と mockito を使用しています。API要求の呼び出しに依存するデータを検証する必要があるところまで来ました。
単体テストの実行時に Rest API 呼び出しがモック データを使用するようにコーディングするにはどうすればよいですか?
StockFragment.java 内で、SpringAndroid + Robospiceを使用して Rest Api 呼び出しを実行します。
また、リクエストが成功したかどうかにかかわらず、フラグメント内の UI を更新する 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
}
}
私が考えている解決策の 1 つは、StockFragment にtestModeフラグを設定し、true の場合にテスト データを返すいくつかの条件文を実行することですが、もっと良いテスト方法があると思います。
Test クラスで Http リクエストをリッスンし、そのリクエストをキャッチしてからモック データを提供する必要があると思いますが、よくわかりません。
注: Robolectric はセットアップされ、動作が確認され、テストされています。上記のコード スニペットには含めていませんが。Roboguice は注射剤としても使用されます。