Hallo,
stehe gerade vor der stilistischen Frage wie weit ich mit meinen Unit Tests gehen soll. Bisher habe ich den grundsatz der Unabhängigkeit von anderen Objekten mehr oder minder vernachlässigt. Aber manchmal kommt auch folgendes bei rum:
Hier hätte ich einen Unit Test, welcher genau bestimmen kann ob MyTreeNode.children() funktioniert. Und dies unabhängig von der Klasse MyField, welche nichtmals implementiert sein müsste. (Ganz im Sinne des TDD) Es wäre hier weitaus einfacher gewesen die Abhängigkeit von MyField hinzunehmen und auf das Mocken zu verzichten. Mittlerweile halte ich dies für recht zeitaufwändig, zumal man separat nochmal einen Funktionstest durchführen müsste, um Auswirkungen von Änderungen an MyField.isSet() testen zu können.
Kommen wir also zu der entscheidenden Frage: "Wie weit geht Ihr bezüglich Abhängigkeiten in Unit Tests?" Mich interessiert einfach das Vorgehen von anderen, sehe im Bereich Unit Tests sehr wenig fremden Code :/
stehe gerade vor der stilistischen Frage wie weit ich mit meinen Unit Tests gehen soll. Bisher habe ich den grundsatz der Unabhängigkeit von anderen Objekten mehr oder minder vernachlässigt. Aber manchmal kommt auch folgendes bei rum:
Java:
@Test
@SuppressWarnings("unchecked")
public void getChildren() {
// Mocks
MyField mock = createMock(MyField.class);
MyField mock_a = createMock(MyField.class);
MyField mock_b = createMock(MyField.class);
// mock_a & mock_b sind leafs (wird durch isSet() bestimmt)
expect(mock_a.isSet()).andReturn(false);
expect(mock_b.isSet()).andReturn(false);
replay(mock_a);
replay(mock_b);
// mock soll hingegen kein leaf sein, also sollte dieses MyField einen Iterator liefern
Iterator<MyField> it = createMock(Iterator.class);
expect(it.hasNext()).andReturn(true);
expect(it.next()).andReturn(mock_a);
expect(it.hasNext()).andReturn(true);
expect(it.next()).andReturn(mock_b);
expect(it.hasNext()).andReturn(false);
replay(it);
expect(mock.isSet()).andReturn(true);
expect(mock.iterator()).andReturn(it);
replay(mock);
// noch ein treeNode entstehen lassen
MyTreeNode node = new MyTreeNode(mock);
// Und testen ob das TreeNode.children funktioniert ...
Enumeration<MyField> e = node.children();
assertThat(e, notNullValue());
assertThat(e.hasMoreElements(), is(true));
assertThat(e.nextElement(), is(mock_a));
assertThat(e.hasMoreElements(), is(true));
assertThat(e.nextElement(), is(mock_b));
}
Hier hätte ich einen Unit Test, welcher genau bestimmen kann ob MyTreeNode.children() funktioniert. Und dies unabhängig von der Klasse MyField, welche nichtmals implementiert sein müsste. (Ganz im Sinne des TDD) Es wäre hier weitaus einfacher gewesen die Abhängigkeit von MyField hinzunehmen und auf das Mocken zu verzichten. Mittlerweile halte ich dies für recht zeitaufwändig, zumal man separat nochmal einen Funktionstest durchführen müsste, um Auswirkungen von Änderungen an MyField.isSet() testen zu können.
Kommen wir also zu der entscheidenden Frage: "Wie weit geht Ihr bezüglich Abhängigkeiten in Unit Tests?" Mich interessiert einfach das Vorgehen von anderen, sehe im Bereich Unit Tests sehr wenig fremden Code :/
Zuletzt bearbeitet: