Eine kürzliche Debatte in meinem Team hat mich gewundert. Das Grundthema ist, wie viel und was wir mit Funktions- / Integrationstests abdecken sollen (sicher, sie sind nicht gleich, aber das Beispiel ist Dummy, wo es keine Rolle spielt).
Angenommen, Sie haben eine "Controller" -Klasse wie:
public class SomeController {
@Autowired Validator val;
@Autowired DataAccess da;
@Autowired SomeTransformer tr;
@Autowired Calculator calc;
public boolean doCheck(Input input) {
if (val.validate(input)) {
return false;
}
List<Stuff> stuffs = da.loadStuffs(input);
if (stuffs.isEmpty()) {
return false;
}
BusinessStuff businessStuff = tr.transform(stuffs);
if (null == businessStuff) {
return false;
}
return calc.check(businessStuff);
}
}
Wir brauchen mit Sicherheit viele Unit-Tests (z. B. wenn die Validierung fehlschlägt oder keine Daten in der Datenbank vorhanden sind, ...), das kommt nicht in Frage.
Unser Hauptproblem und darüber können wir uns nicht einigen, wie viele Integrationstests es abdecken sollen :-)
Ich bin auf der Seite, dass wir weniger Integrationstests anstreben werden (Testpyramide). Was ich davon abdecken würde, ist nur ein einziger glücklich-unglücklicher Pfad, auf dem die Ausführung von der letzten Zeile zurückkehrt, nur um zu sehen, ob ich diese Sachen zusammenstelle, wird sie nicht explodieren.
Das Problem ist, dass es nicht so einfach ist zu sagen, warum der Testergebnis falsch war, und dass sich einige der Jungs darüber unwohl fühlen (z. B. wenn wir nur den Rückgabewert überprüfen, ist es verborgen, dass der Test grün ist weil jemand die Validierung geändert hat und sie false zurückgibt). Sicher, ja, wir können alle Fälle abdecken, aber das wäre imho ein schwerer Overkill.
Hat jemand eine gute Faustregel für diese Art von Problemen? Oder eine Empfehlung? Lesen? Sich unterhalten? Blogeintrag? Irgendwas zum Thema?
Vielen Dank im Voraus!
PS: Sry für das hässliche Beispiel, aber es ist ziemlich schwierig, einen bestimmten Codeteil in ein Beispiel zu übersetzen. Ja, man kann darüber streiten, Ausnahmen auszulösen / einen anderen Rückgabetyp zu verwenden / etc. aber unsere Hand ist aufgrund externer Abhängigkeiten mehr oder weniger gebunden.
PS2: Ich habe dieses Thema von SO hierher verschoben (ursprüngliche Frage, in der Warteschleife markiert )