Hallo,
angenommen ich habe folgende grob skizzierte Klassen:
Man kann nun Unittests für a1 schreiben, die die Methode compute() testen, soweit kein Problem.
Auch für B1 lassen sich Unittests schreiben, man kann A1 sehr leicht "wegmocken", indem man einfach einen Mock in den Konstruktor von B1 gibt. Dadurch kann ich ein bereits "richtiges" Ergebnis als Grundlage für meinen Test der Methode evaluate() benutzen, ohne die "komplexen" Berechnungen wirklich auszuführen. Auch kein Problem Das sind alles Unittests.
Jetzt stellt sich mir folgende Frage: Was passiert, wenn jemand die Funktionalität von A1 so ändert, das das MyComplexResult mit völlig anderen Werten befüllt ist und den Test von B1 NICHT anpaßt.
Auf Unitebene würde das überhaupt niemandem auffallen, B1 würde immer noch durchlaufen, da es ja mit den für B1 "richtigen" Grundlagen arbeitet. Das wäre nicht der Fall, wenn A1 nicht weggemockt werden würde, dann würde B1 sofort Fehler beim Testen geben.
Ich vermute hier müßten Integrationstests greifen. Aber dann müßten Unittests UND Integrationstests geschrieben werden, wobei man sich dann fragen könnte, ob die Mocktests wirklich einen Zweck haben.
Was denkt Ihr dazu ?
Hoffentlich ist es verständlich
Danke.
angenommen ich habe folgende grob skizzierte Klassen:
Java:
package a;
class A1 implements A {
public MyComplexResult compute(int i) {
MyComplexResult mcr = ...
// sehr komplexe Berechnung mit DB Zugriff etc. etc.
return mcr;
}
}
package b;
class B1 implements b {
private A a1 = ...
// z.B. wird a1 im Konstrukter von b1 gesetzt.
public boolean evaluate(int i, String s) {
// Berechnungen ...
MyComplexResult mcr = this.a1.compute(i);
// weitere Berechnungen ...
boolean b = ...
return b;
}
}
Man kann nun Unittests für a1 schreiben, die die Methode compute() testen, soweit kein Problem.
Auch für B1 lassen sich Unittests schreiben, man kann A1 sehr leicht "wegmocken", indem man einfach einen Mock in den Konstruktor von B1 gibt. Dadurch kann ich ein bereits "richtiges" Ergebnis als Grundlage für meinen Test der Methode evaluate() benutzen, ohne die "komplexen" Berechnungen wirklich auszuführen. Auch kein Problem Das sind alles Unittests.
Jetzt stellt sich mir folgende Frage: Was passiert, wenn jemand die Funktionalität von A1 so ändert, das das MyComplexResult mit völlig anderen Werten befüllt ist und den Test von B1 NICHT anpaßt.
Auf Unitebene würde das überhaupt niemandem auffallen, B1 würde immer noch durchlaufen, da es ja mit den für B1 "richtigen" Grundlagen arbeitet. Das wäre nicht der Fall, wenn A1 nicht weggemockt werden würde, dann würde B1 sofort Fehler beim Testen geben.
Ich vermute hier müßten Integrationstests greifen. Aber dann müßten Unittests UND Integrationstests geschrieben werden, wobei man sich dann fragen könnte, ob die Mocktests wirklich einen Zweck haben.
Was denkt Ihr dazu ?
Hoffentlich ist es verständlich
Danke.