如何在 Google Appengine 代码上使用 Google CodePro Coverage?
我正在尝试使用 Google 的 CodePro 覆盖率工具来测量 Google AppEngine 项目上的单元测试的覆盖率。但是,我在运行测试时遇到各种 ClassFormatError 异常。
其他人是否获得过使用 Google Appengine 项目进行 Google CodePro 的报道?
以下是我正在寻求的调查线索:
a) 多个级别的字节码工程不能协同工作。 Ie CodePro 正在对抗 GAE JPA 实现(DataNucleus 工具持久类)。
b) 我的一些 RTFM 错误
这是例外:
java.lang.ClassFormatError: Invalid length 65525 in LocalVariableTable in class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
I'm trying to use Google's CodePro Coverage tool to measure the coverage of my unit tests on a Google AppEngine project. However I'm getting various ClassFormatError exceptions on running the tests.
Have others got Google CodePro coverage working with a Google Appengine project?
Here are the lines of enquiry I'm pursuing:
a) Multiple levels of byte code engineering not working together. I.e. CodePro is fighting the GAE JPA implementation (DataNucleus instruments persistent classes).
b) Some RTFM error on my part
Here is the exception:
java.lang.ClassFormatError: Invalid length 65525 in LocalVariableTable in class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是我自己问题的答案,但我不太喜欢它。
我制作了一个全新的 Eclipse 覆盖项目,并使用 CodePro 对该项目进行了检测。
在这个覆盖项目中,我包含了我的 GAE 项目和单元测试项目的源代码。
我在覆盖项目中创建了一个样板类,它使用 JUnitCore 来调用单元测试项目中的 JUnit TestCases。
在您对已检测的项目进行至少一次运行后,才会显示 GAE 项目的结果。然后,覆盖率运行视图会发布针对该项目的统计信息。
感觉真的很难看,而且我对 CodePro 的印象真的不太好。它低于谷歌工具的标准。
我还研究过使用 codepro ant 任务,但是覆盖率检测任务已经消失。它过去是在 CodePro 产品实例化的一部分时被调用的。
我想我应该考虑简单地使用 EMMA(CodePro 是基于它的)。
从长远来看,我需要通过自动构建生成覆盖率报告。 CodePro 似乎不可能实现这一点。
Here's an answer to my own question, but I don't like it much.
I made a completely new eclipse coverage project, and instrumented this project with CodePro.
In this coverage project I included the source code for my GAE project and my unit test project.
I made a boilerplate class in the coverage project that uses JUnitCore to call the JUnit TestCases in the unit test project.
Results for the GAE project are not displayed until you do at least one run with that project instrumented. The coverage run view then appears to publish stats against that project.
It feels really ugly and I'm really not very impressed with CodePro. It's under par for a google tool.
I've also looked into using the codepro ant tasks however the coverage instrumentation task has gone. It used to be called when it was part of instantiations CodePro product.
I think I shall look at simply using EMMA (on which CodePro is based).
Long term I need coverage reports to be generated from an automated build. Something that doesn't appear possible with CodePro.