2015-03-01 18 views
6

Mam już smak debugowania w Androidzie. Moja Gradle plik konfiguracyjny dla mojego modułu aplikacji zawiera następujące elementy:Jak mogę uruchomić Jacoco w Androidzie studio dla pokrycia kodu

debug{ 
    testCoverageEnabled true 
} 

Potem uruchom następujące polecenie w terminalu:

gradlew createDebugCoverageReport 

i rzeczywiście mogę dostać raport ale aplikacja wywala również z przeczytane tylko błąd i nie mogę tego zrozumieć. Używam mac. Oto ślad stosu:

**java.io.FileNotFoundException: /jacoco.exec: open failed: EROFS (Read-only file system)** 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:416) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.output.FileOutput.openFile(FileOutput.java:67) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.output.FileOutput.startup(FileOutput.java:49) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.Agent.startup(Agent.java:122) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.Agent.getInstance(Agent.java:50) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at org.jacoco.agent.rt.internal_932a715.Offline.<clinit>(Offline.java:31) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at mypackage.org.duckduck.MainApplication.$jacocoInit(MainApplication.java) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at mypackage.org.duckduck.MainApplication.<clinit>(MainApplication.java) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.Class.newInstanceImpl(Native Method) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.Class.newInstance(Class.java:1319) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.Instrumentation.newApplication(Instrumentation.java:983) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.Instrumentation.newApplication(Instrumentation.java:968) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.LoadedApk.makeApplication(LoadedApk.java:499) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4480) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread.access$1300(ActivityThread.java:146) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:99) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.os.Looper.loop(Looper.java:137) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5168) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:564) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at dalvik.system.NativeStart.main(Native Method) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EROFS (Read-only file system) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.Posix.open(Native Method) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:400) 
03-01 00:04:56.871 19006-19006/mypackage.org.duckduck W/System.err﹕ ... 24 more 

Odpowiedz

0

Miałem ten sam problem z uruchomieniem jacoco na urządzeniu USB. Korzystanie z Genymotion rozwiązało problem.

0

Ponieważ ja nie widzę całą swoją Gradle plik nie jestem pewien, czy masz już tę właściwą drogę, ale jedna propozycja jest nie stosować wtyczki jacoco wyraźnie jeśli jesteś w pliku gradle. Najnowsza wersja Gradle jest zapakowana w JaCoCo.

To łamało moje testy do niedawna, kiedy próbowałem bez tej linii.

Inną rzeczą jest po prostu uruchomić

gradle connectedCheck

z terminala (Mac) lub wiersza poleceń (Windows), a to generuje raport pokrycia kodu HTML dla mnie.

Mam nadzieję, że spróbujemy rozwiązać ten problem.

+0

To nie jest mój problem. Zdaję sobie sprawę, że jacoco jest już obecny bez aktualizacji kołyski. Czy próbowałeś tego w studiu android? – j2emanue

+0

@mistwalker Zauważyłem, że raport html NIE zostanie wygenerowany, jeśli testy się nie powiedzie, czy masz ten sam problem? – Johnny

0

To ostrzeżenie wydaje znaczenia:

Komunikat o błędzie odszedł podczas montażu główny system plików do odczytu i zapisu

mount -o remount,rw rootfs/

, a tylko ustawienie uprawnienia do zapisu dla wszystkich użytkowników (tylko to zrobić na emulator !, jest naprawdę niepewny)

chmod 777/

Niestety, moje testy zostały przerwane przed i po, zmiana tego nie naprawiła ich wcale.

Więc jeśli nie ma prawdziwego problemu, możesz po prostu potraktować to jako wiadomość, która nie wymaga działania.