2016-03-29 11 views
22

Проблема

Я наладка покрытия модульного тестирования коды для Android библиотеки, которая использует Robolectric для запуска тестов и PowerMock/Mockito для макета тестирования.Могу ли я использовать Cobertura на модульных тестах с PowerMock?

Однако запуск юнит-тестов с Cobertura приводит к следующему Exception ...

: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 

... и сгенерированный отчет Cobertura не показывает охват на всех. Cobertura report with PowerMock


Запуск же TestCase без PowerMock *, тесты прекрасно работают и отчет покрытие формируется успешно: Cobertura report without PowerMock

* т.е. комментируя тесты с использованием PowerMock, удаление PowerMockIgnore аннотацию, то PowerMockRule и вызов MockitoAnnotations.initMocks(this);.


Исследование


Вопрос

Можно ли использовать Cobertura в сочетании с PowerMock?

  • В этом случае, что мне не хватает?
  • В противном случае, как мне измерить покрытие кода такой установкой (Android Library + Robolectric + PowerMock)?
+1

У меня такая же проблема. Gradle build, тесты Powermock показываются с охватом 0%. Хотелось бы решить эту проблему. – jjNford

+1

+1 для вашего очень четкого вопроса. Не могли бы вы поделиться базовым проектом, воспроизводящим проблему (например, на github)? – gontard

+0

В тестовых случаях вы расширяете класс из PowerMockTestCase? –

ответ

-2

Сейчас Android Studio объединяет jacoco автоматически, чтобы сделать покрытие кода.

Вам просто нужно добавить несколько строк кода:


apply plugin: 'jacoco-android' 

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

Более подробная информация здесь:

+1

Я пробовал ваше решение, но добавление jacoco и запуск createDebugCoverageReport генерирует [пустой отчет] (http://i.stack.imgur.com/ACTcY.png). Кроме того, уверены ли вы, что jacoco работает для unit-тестов ('test'), а не только для Instrumentation Testing (' androidTest')? Статья, которую вы связали, делает последнее, в то время как я пытаюсь достичь первого * с помощью Robolectric *. – PLNech

 Смежные вопросы

  • Нет связанных вопросов^_^