Im Sinne von “keinen Produktivcode schreiben, bevor ein Test dies erzwingt” habe ich den folgenden Test geschrieben:
import org.junit.Test;
public class RefreshObserverTest {
private class RefreshObserverImplementation implements RefreshObserver {
private int count = 0;
@Override
public void refresh() {
++count;
}
public int getCount() {
return count;
}
}
@Test
public void create() {
RefreshObserver observer = new RefreshObserverImplementation();
assertNotNull(observer);
}
@Test
public void refresh() {
RefreshObserver observer = new RefreshObserverImplementation();
observer.refresh();
}
@Test
public void refreshAndGettestCount() {
RefreshObserverImplementation observer = new RefreshObserverImplementation();
observer.refresh();
observer.refresh();
observer.refresh();
int actual = observer.getCount();
int expected = 3;
assertEquals(expected, actual);
}
}
Ziemlich von oben nach unten, beginnend mit der implementierenden Klasse. Dabei entstand dann auch schon recht schnell das fertige Interface:
void refresh();
}
Die Sache mit dem Zähler scheint mir etwas umständlich, aber der Test davor, der einfach nur die Methode aufruft, testet ja nicht wirklich etwas, außer dass die Methode in der das Interface implementierenden Klasse da sein muss.
Ist das jetzt Overkill? Sollte man das so machen? Oder gibt es bessere Wege, Interfaces zu testen?