2016-03-29 16 views
22

Problem

ja Ustawiając urządzenie-test pokrycia kodu dla Android, który wykorzystuje bibliotekę Robolectric uruchomić testy i PowerMock/Mockito dla makiety testów.Czy mogę używać Cobertury w testach jednostkowych z PowerMock?

Jednak prowadzenie testów jednostkowych z Cobertura skutkuje następującym wyjątkiem ...

:example:testDebugUnitTest 
Exception in thread "Thread-5" java.lang.ExceptionInInitializerError 
    at com.example.package.saas.Query$RemoveWordsType.__cobertura_init(Query.java) 
    at com.example.package.saas.Query$RemoveWordsType.<clinit>(Query.java) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesToSingleClassOnProjectData(TouchCollector.java:123) 
    at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:110) 
    at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:272) 
    at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:33) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalStateException: Shutdown in progress 
    at java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:66) 
    at java.lang.Runtime.addShutdownHook(Runtime.java:211) 
    at net.sourceforge.cobertura.coveragedata.ProjectData.initialize(ProjectData.java:239) 
    at net.sourceforge.cobertura.coveragedata.ProjectData.getGlobalProjectData(ProjectData.java:209) 
    at net.sourceforge.cobertura.coveragedata.TouchCollector.<clinit>(TouchCollector.java:45) 
    ... 11 more 

... a wygenerowany raport Cobertura pokazuje żadnego pokrycia w ogóle. Cobertura report with PowerMock


Uruchomienie samego testcase bez PowerMock *, testy działają dobrze, a zasięg jest generowany raport z powodzeniem: Cobertura report without PowerMock

* tj komentowania testów z wykorzystaniem PowerMock, usuwając PowerMockIgnore adnotacji PowerMockRule i wywołanie MockitoAnnotations.initMocks(this);.


Investigation


Pytanie

Czy można używać w połączeniu z Cobertura PowerMock?

  • W takim razie czego mi brakuje?
  • W przeciwnym razie, w jaki sposób powinienem zmierzyć zasięg kodu przy takiej konfiguracji (Android Biblioteka + Robolectric + PowerMock)?
+1

Mam ten sam problem. Konstrukcja Gradle, testy Powermock wykazują 0% pokrycia. Chciałbym, aby to rozwiązano. – jjNford

+1

+1 za bardzo jasne pytanie. Czy możesz podzielić się podstawowym projektem odwzorowującym problem (na przykład na github)? – gontard

+0

W teście przypadków testowych rozszerzasz klasę z PowerMockTestCase? –

Odpowiedz

-2

W tej chwili Android Studio automatycznie integruje się z jacoco w celu wykonania kodu.

Wystarczy dodać kilka linijek kodu:


apply plugin: 'jacoco-android' 

android { 
    buildTypes { 
     debug { 
     testCoverageEnabled = true 
     } 
    } 
} 

Więcej informacji tutaj:

+1

Próbowałem Twojego rozwiązania, ale dodanie jacoco i uruchomienie createDebugCoverageReport generuje [pusty raport] (http://i.stack.imgur.com/ACTcY.png). Poza tym, czy jesteś pewien, że jacoco pracuje dla testów jednostkowych ('test'), a nie tylko dla testowania oprzyrządowania (' androidTest')? Artykuł, który łączyłeś, robi to drugie, a ja próbuję osiągnąć ten pierwszy * przy pomocy Robolectric *. – PLNech

Powiązane problemy