Ich finde es problematisch, in Unittests pro Methode zu testen, statt jede Funktionalität einzeln. Im großen und ganzen stellt zwar jede Methode eine Funktionalität dar, aber am Beispiel vom EitherTest sieht man, dass jeweils eine Unterscheidung zwischen Left und Right gemacht werden muss.
Insbesondere ist dieser Test kritisch zu betrachten:
public void testGetRight() throws Exception {
//Right
Either<Integer, String> right = Either.right("foo");
assertEquals("foo", right.getRight());
//Left
Either<Integer, String> left = Either.left(42);
left.getRight();
}```
Wenn ich den Test jetzt wie folgt modifiziere, ist er immer noch grün, obwohl der Test eigentlich fehlschlagen sollte:
```@Test(expected = NoSuchElementException.class)
public void testGetRight() throws Exception {
//Right
Either<Integer, String> right = Either.right("foo");
assertEquals("foo", right.getLeft());
//Left
Either<Integer, String> left = Either.left(42);
left.getLeft();
}```
Zumindest Tests bei denen eine Exception erwartet wird, sollten daher gesplittet werden.
Damit einhergehend müsste natürlich auch die Namensgebung angepasst werden. Sprechendere Namen, die die Funktionalität beschreiben, wären dann sinnvoll.
Beispiel: `getRightThrowsNoSuchElementExceptionIfCalledOnLeft`
Das klingt vielleicht erst einmal sperrig, das zugrunde liegende Problem ist aber schon in der Liste der roten Tests erkennbar, ohne auch nur in den Testcode sehen zu müssen.