Verwirrt wie zu verwenden Mockito für ein android-test

Ich bin versucht, zu schreiben unit Tests für meine android-app, aber Schwierigkeiten haben, zu tun, was ich will, mit mockito. Dies wird in Verbindung mit Robolectric, die ich gut arbeiten und haben gezeigt, dass unit-tests arbeiten.

Möchte ich testen, ob oder nicht Sie mit einem Klick öffnen Sie eine neue Aktivität, je nachdem, ob es gibt einige bluetooth-Gerät verbunden. Offensichtlich, dort ist kein Gerät verbunden mit bluetooth in meinem test, aber ich möchte so tun, als ob es ist. Den Status der bluetooth-Verbindung ist gespeichert in meiner Application-Klasse. Es gibt keine öffentlich zugängliche Methode, diesen Wert zu ändern.

Also im Grunde der Logik in der app ist wie folgt:

HomeActivity.java:

//this gets called when the button to open the list is clicked.
public void openListActivity(View button) { 
  MyApplication myApplication = (MyApplication) getApplication();
  if (myApplication.isDeviceConnected() {
      startActivity(new intent(this, ListActivity.class));
   }
}

So, um dies zu testen habe ich Folgendes:

TestHomeActivity.java:

@Test
public void buttonShouldOpenListIfConnected() {
    FlexApplication mockedApp = Mockito.mock(MyApplication.class);
    Mockito.when(mockedApp.isDeviceConnected()).thenReturn(true);
    //listViewButton was setup in @Before
    listViewButton.performClick();
    ShadowActivity shadowActivity = Robolectric.shadowOf(activity);

    Intent intent = shadowActivity.getNextStartedActivity();
    assertNotNull(intent); //this fails because no new activity was opened. I debugged this and found that isDeviceConnected returned false.
    ShadowIntent shadowIntent = Robolectric.shadowOf(intent);
    assertThat(shadowIntent.getComponent().getClassName(), equalTo(ListActivity.class.getName()));
}

Also mein unit-test schlägt fehl, weil der Aufruf (in der Tätigkeit) zu isDeviceConnected gibt false zurück, obwohl ich dachte ich sagte es true zurück, mit dem mock-framework. Ich möchte, dass meine Tests haben diese Methode true zurück, wenn. Ist das nicht das, was mockito tut oder bin ich Total Irre, wie mockito?

InformationsquelleAutor Matt Wolfe | 2012-12-20
Schreibe einen Kommentar