7

Ich erbte ein Android-Projekt, um Code-Coverage für einzurichten. Da ich nicht viel für Android und fast genauso wenig in Großbuchstaben getan hatte, machte ich mich auf die Suche nach einem hilfreichen Tutorial. Als Überraschungen waren die ersten Tutorials sehr hilfreich und ich konnte das jacoco gradle Plugin einbinden und die Code Coverage aktivieren. Mit Jenkins habe ich sogar einen Report erstellt. Bis jetzt sieht alles gut aus.Android Instrumentierung Tests für Bibliothek Modul Abdeckung

Als ich jedoch meine Augen auf den Bericht richtete, roch ich etwas Fischiges. Das Test-Deckungs-Verhältnis schien viel zu klein zu sein. Weitere Untersuchung ergab den Schuldigen.

Die Tests selbst sind mehr als funktionale Einheiten geschrieben. Das wäre in Ordnung. Die Projektbibliothek enthält jedoch keine Tests in ihrem Modul. Stattdessen werden die Bibliothekstests in das GUI-Modul geschrieben (da dort die Bibliothek verwendet wird).

Daher, obwohl die meisten Bibliotheksfunktionalität durch Tests abgedeckt ist, Abdeckung nur für Zeug aus GUI-Modul generiert wird.

Projekt

- Gui Modul

---- gui Quellen

---- alle Tests

- Bibliothekmodul

---- Bibliotheksquellen

Nein Ich habe schon lange nach einer funktionierenden Lösung gesucht. Unglücklicherweise war alles, was ich finden konnte, die Kombination von Test-Coverage-Ergebnissen von Einheit und Integration in einem Bericht (oder anderen Unit-Test-basierten Lösungen - von denen keine für die Instrumentierungs-Lösungen funktionierte).

Was ich brauche, ist Abdeckung für Quellen von Bibliothek Modul basierend auf Gui-Modul-Tests zu generieren.

Da stolpere ich hier im Dunkeln, ist sowas überhaupt aus der Ferne möglich?

Antwort

3

Für alle, die dies lesen ... wenn Sie das gleiche Problem haben, ist es Zeit, den Kopf gegen die Wand zu beginnen hämmern ...

Heute ich hatte das Glück, auf das stolpern: https://issuetracker.google.com/issues/37004446#comment12

Das eigentliche "Problem" scheint zu sein, dass Bibliotheksprojekte "immer" vom Release-Typ sind. Daher enthalten sie nicht "notwendige Instrumentierungseinstellungen" (außer Sie aktivieren die Codeabdeckung für die Freigabe, obwohl ich sie nicht getestet habe).

So ist die Lösung, um spezifisch zu aktivieren, in der Bibliothek veröffentlicht werden, "debug" Build (wie erwähnt, standardmäßig ist der Release-Typ):

android { 
     publishNonDefault true 
} 

im Projekt dann die Bibliothek verwendet, geben Sie eine debugCompile Abhängigkeit (Freigabe der Kompilierung können die „default“ Release-Konfiguration verwenden):

dependencies { 
     debugCompile project(path: 'library', configuration: 'debug') 
     releaseCompile project('library') 
} 

Und natürlich (diese ich für selbstverständlich), denken Sie daran Testabdeckung für die Bibliothek zu aktivieren:

android { 
     buildTypes { 
       debug { 
         testCoverageEnabled true 
       } 
     } 
} 
Verwandte Themen