Manchmal muss es ein grober Klotz sein. Ein Klasse die ich entwickelt hatte, hatte eine bestimmte Signatur. Nix wildes, beispielsweise war die Klasse final. Wenn eine Klasse final ist, muss ich mich nicht um die Probleme kümmern, die Vererbung mit sich bringen kann. Das final war plötzlich verschwunden. Grund: in einem Test wurde eine abgeleitete Version benötigt. Leider wurde nur das final entfernt. Die Klasse aber nicht hinsichtlich Vererbung angepasst. Z.B. habe ich in der equals Methode noch den instanceof Operator verwendet. Geht bei final Klassen. Bei Klassen, die nicht final sind ist das grob fahrlässig.
Ich habe den Test umgeschrieben – es geht auch einfach ohne Vererbung mit nur einer Zeile Code mehr und dann die Tests erweitert. Bisher habe ich immer nur die Erzeugung eines Exemplars über den Konstruktor getestet. Jetzt teste ich auch die Signatur. Den Test habe ich mit einem Kommentar versehen. Hoffentlich hilft es.
@Test
public void creation() {
// If you must change these tests go into yourself and check:
// are the changes are really needed?
new Notifier();
final Constructor>[] cons = Notifier.class.getDeclaredConstructors();
assertThat(cons.length, is(equalTo(1)));
assertThat(Modifier.isPublic(cons[0].getModifiers()), is(equalTo(true)));
final int modifiers = Notifier.class.getModifiers();
assertThat(Modifier.isPublic(modifiers), is(equalTo(false)));
// Implementation safe for inheritance?
assertThat(Modifier.isFinal(modifiers), is(equalTo(true)));
}
Vorher sah der Test so aus:
@Test
public void creation() {
new Notifier();
}
