mardi 26 janvier 2016

Retrofit Unit Test with Roboletric

Is there any possibility to test if Retrofit callback return success?

My code is quite simple:

@Config(constants = BuildConfig.class, sdk = 21,
            manifest = "app/src/main/AndroidManifest.xml")
@RunWith(RobolectricGradleTestRunner.class)
public class RetrofitCallTest {

private MainActivity mainActivity;

@Mock
private RetrofitApi mockRetrofitApiImpl;

@Captor
private ArgumentCaptor<Callback<List<MyObject>>> callbackArgumentCaptor;

@Before
public void setUp() {            
    MockitoAnnotations.initMocks(this);

    ActivityController<MainActivity> controller = Robolectric.buildActivity(MainActivity.class);
    mainActivity = controller.get();

    RestClient.setApi(mockRetrofitApiImpl);

    controller.create();
}

@Test
public void shouldFillAdapter() throws Exception {
    Mockito.verify(mockRetrofitApiImpl)
        .getYourObject(callbackAgrumentCaptor.capture());

    int objectsQuantity = 10;
    List<MyObject> list = new ArrayList<YourObject>;
    for(int i = 0; i < objectsQuantity; ++i) {
        list.add(new MyObject());
    }

    callbackArgumentCaptor.getValue().success(list, null);

    ListAdapter adapter = mainActivity.getAdapter(); 
    assertThat(adapter .getItemCount(), equalTo(objectsQuantity));
}

It's clear - I test if my code works correctly WHEN api return success.

But is there any posibility to test IF api return success?

Aucun commentaire:

Enregistrer un commentaire