Path: csiph.com!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: "Christian H. Kuhn" Newsgroups: de.comp.lang.java Subject: =?UTF-8?Q?Re:_Unit-Tests_von_Einheiten_ohne_=c3=b6ffentliche_Lesesc?= =?UTF-8?Q?hnittstelle?= Date: Fri, 8 Jul 2016 16:05:46 +0200 Lines: 68 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net gdoHVB/CDzxSpLqGGKNhXgQofJRtqQkMZ+A3/wl2Jo/WdiqMo= Cancel-Lock: sha1:zkjRfgfXbPhV0Rk2nHSOyHms7Po= User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 In-Reply-To: Xref: csiph.com de.comp.lang.java:12978 Zwischenspiel. Am 07.07.2016 um 21:19 schrieb Christian „Ingrid“ Kuhn: > In der Folge ist entsprechend die Testabdeckung, die von JaCoCo > ermittelt wird, entsprechend niedrig. JaCoCo war das Mittel der Wahl, weil es von EclEmma benutzt wird und somit in Eclipse zur Verfügung steht. Es scheint nicht das beste Mittel zu sein: public class Rumspiel { private enum Possibilities { A, B; } private Possibilities poss; public Rumspiel() { poss = Possibilities.A; } public void setPoss(final boolean _poss) { if (_poss) { poss = Possibilities.A; } else { poss = Possibilities.B; } } public void aMethod() { switch (poss) { case A: System.out.println("Fall A"); break; case B: System.out.println("Fall B"); break; } } } Ein default in der Switch-Anweisung wäre unerreichbarer Code; andere Möglichkeiten als A und B können nicht vorkommen. Insbesondere kann poss nicht null sein, das wird durch Konstruktor und setPoss verhindert. Ohne Default behauptet JaCoCo aber, dass nur 2 von 3 Branches abgedeckt sind. Lösbar ist das Problem, dass einer der cases zum default deklariert wird. Das vermindert aber zumindest die Lesbarkeit des Codes; und ich behaupte einfach mal, dass auch die Wartbarkeit leidet, weil ich bei einer möglichen späteren Erweiterung des enum, das vielleicht inzwischen in ein anderes Package ausgelagert wurde, nicht mehr sofort erkennen kann, dass default eben nicht default, sondern ein ganz konkreter case ist. Google kennt das Problem, aber nicht die Lösung. Sourcen ändern, um bei gleicher Funktionalität Tests zu erfüllen, ist wohl kein guter Gedanke. Den Branch-Schwellenwert, der für einen grünen Build erreicht werden muss, abzusenken kann auch keine Lösung sein, denn der erträgliche Wert hängt zu sehr von der Anzahl der switch- zu sonstigen Verzweigungen ab. Bleibt ein anderes Tool. Eines, das mit Maven, Gradle und Jenkins zusammenarbeitet. Ich bin auf Serenity, Cobertura und das proprietäre Clover gestoßen, JCov scheint sich mit CI-Tools nicht zu vertragen. Was benutzt ihr? Und mit welchen Erfahrungen? TIA QNo