Mockito-Argumente verwenden

Gespeichert von Erik Wegner am/um Mi, 09.11.2016 - 17:01
Body

Softwareentwicklung ist besonders entspannt, wenn alle Funktionen ausreichend getestet sind. Dazu werden Unit-Tests geschrieben, die regelmäßig ausgeführt werden. Der zu testende Bereich soll dabei möglichst klein gehalten werden, um bei fehlschlagenden Tests schnell die Ursache zu lokalisieren. Weil Funktionen untereinander abhängig sind, werden nicht zu testende Abhängigkeiten mit Hilfe von Mocks ersetzt. Im Java-Umfeld gibt es dafür Mockito.

Im folgenden wird ein Interface und eine zu testende Funktion dargestellt.

public interface DatabaseAccess {
  String getString(String s, int i1, int i2);
}

public String readStringFromDatabase(DatabaseAccess db, int i1, int i2) {
  return db.getString("abc", i1, i2);
}

Im Rahmen eines Tests soll die Funktion aufgerufen werden. Dies wird so definiert:

@Test public void testReadStringReturns() {
  DatabaseAccess db = Mockito.mock(DatabaseAccess.class);
  assertEqual("0-6", readStringFromDatabase(db, 0, 6);
}

Damit die Aufrufparameter des Mockito-Objekts verwendet werden können, hilft dann folgende Konfiguration:

@Before public void Setup() {
  Mockito
    .when(db.getString(Mockito.anyString(), Mockito.anyInt(), Mockito.anyInt())
    .thenAnswer(
      new Answer() {
        @Override public Object answer(InvocationOnMock invocation) {
          Object[] args = invocation.getArguments();
          String s = (String)args[0];
          int i1 = (int)args[1];
          int i2 = (int)args[2];
          return "" + i1 + "-" + i2;
        }
      });
}

Quelle: StackOverflow

Kategorien