PLN*_*ech 29 android unit-testing cobertura powermock robolectric
我正在为Android库设置单元测试代码覆盖率,该库使用 Robolectric运行测试,PowerMock/Mockito用于模拟测试.
但是,使用Cobertura运行单元测试会导致以下异常...
: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
Run Code Online (Sandbox Code Playgroud)
......并且生成的Cobertura报告根本没有显示任何报道.

在没有PowerMock*的情况下运行相同的测试用例,测试运行正常并且成功生成覆盖率报告:

*即使用PowerMock评论测试,删除PowerMockIgnore注释,调用PowerMockRule和MockitoAnnotations.initMocks(this);调用.
forkmode="once".ForkMode.ONCE.cobertura-runtime修复类似的问题,但添加它也没有改变任何东西.是否可以将Cobertura与PowerMock结合使用?
目前,Android Studio 自动集成了jacoco来进行代码覆盖。
您只需要添加几行代码:
apply plugin: 'jacoco-android'
Run Code Online (Sandbox Code Playgroud)
android {
buildTypes {
debug {
testCoverageEnabled = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息请点击这里: