该声纳页面基本上列出了不同代码覆盖率分析工具采用的各种方法:
这三种方法是什么,哪种方法效率最高?为什么?如果效率问题的答案是"它取决于",那么请解释原因?
我正在编写一个Ant脚本来对我的Play 进行一些额外的检查!框架应用.
目前,我正在通过执行exec调用"播放自动测试"从我的Ant脚本执行我的测试.
<exec executable="${play.dir}/play.bat">
<arg line="auto-test"/>
</exec>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何将Clover集成到Play测试套件中?显然,我并不依赖于必须使用上述方法运行我的测试.
我也尝试使用执行JUnit测试的传统方式编写Ant脚本(即使用Ant的junit
目标),我遇到了两个问题:
因此,如果我要沿着这junit
条路走下去,我需要知道如何执行我所有的测试,以便它们可以一个接一个地成功运行(它在使用Play运行方式时有效play auto-test
)我需要知道为什么Clover会这样做似乎没有找到Play测试触及的代码行.
(我知道有一个用于播放的Cobertura模块,但是,我发现Clover做得更好,告诉我一个准确的覆盖数字)
更新:不幸的是我无法复制我之前遇到的确切错误,因为当我尝试手动编译时遇到了编译问题.我已经开始使用Secure模块,它只包含Java源文件.因此,在我的Ant脚本中,我调用play precompile
哪个产生Secure模块的字节代码(以及系统中的所有其他内容,包括我的代码).所以现在当我尝试使用Clover编译我的应用程序代码时,我认为编译器有点纠结,因为我有两个版本的类 - 一个由预编译命令(非三叶草)生成,一个由我自己生成蚂蚁编译(与三叶草):
[javac] C:\projects\testproject\out\clover\classes\clover8583527041716431332.tmp\model\HouseTest.java:45: incompatible types
[javac] found : play.db.jpa.JPABase
[javac] required: models.House
[javac] __CLR2_5_115y15ygoxiz3dv.R.inc(1527);House found = House.findById(id);
Run Code Online (Sandbox Code Playgroud)
所以我现在基本上有两个问题:
play precompile
在Ant脚本中调用自己来解决它junit
目标执行测试.更新#2:事实证明我得到的错误是由于findById
调用需要从JPABase转到House(而不是IDE或者游戏似乎关心它).所以在我进入并为所有play的"find*"方法投了一个演员之后,我实际上得到了JUnit和Clover的报道! 但是......我现在遇到两种错误:
在Play中创建的实体类可以通过扩展Model
提供魔术方法的类来创建,例如find
前面提到的那些方法以及count
方法.Model超类实际上扩展了GenericModel,它通过抛出UnsupportedOperationException来实现这些方法.所以显然玩!在幕后做一些更神奇的事情来提供这些方法的实际实现.不幸的是,我的测试(和生产代码)依赖于计数等方法,但它们在我的ant/junit场景中抛出异常(注意:运行时一切正常play auto-test
.
我得到的另一个错误是由于我使用Spring模块.在我的一个类(根类)中,我打电话Spring.getBeanOfType(Some.class)
.现在我使用自动扫描,但是在ant/junit测试环境中,Spring模块还没有设置我的spring容器,因此调用只返回null.
我有一种感觉,有一个神奇的解决方案可以解决我的两个问题但是我不确定这个神奇的修复是什么.
我在我的pom.xml中有这个插件代码.如果我删除此插件,那么Maven将不会运行两次单元测试.我只是想知道这个插件的哪个部分使单元测试运行两次.
<plugin>
<groupId>com.atlassian.maven.plugins</groupId>
<artifactId>maven-clover2-plugin</artifactId>
<version>3.0.4</version>
<configuration>
<licenseLocation>/location/to/clover.license</licenseLocation>
<generateXml>true</generateXml>
<generateHtml>true</generateHtml>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>instrument</goal>
</goals>
</execution>
<execution>
<id>main</id>
<phase>verify</phase>
<goals>
<goal>instrument</goal>
<goal>aggregate</goal>
<goal>clover</goal>
</goals>
</execution>
<execution>
<id>site</id>
<phase>pre-site</phase>
<goals>
<goal>instrument</goal>
<goal>aggregate</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud) 我为什么需要这个?我在symfony项目上运行测试(并使用Zend fw),phpunit为所有受影响的文件生成三叶草.但我不希望看到symfony和Zend libs(以及所有其他第三方)的报道.我希望只看到我的代码的报道.或者可能这应该做三叶草查看器?我正在使用hudson的clover插件,但它不支持查看特定来源.三叶草插件显示,我的代码只覆盖了20%,这是不正确的,因为它也考虑了symfony和Zend库.
顺便说一下,可能还有另外一种方法可以解决这个问题吗?
我正在使用Clover 2.5,我有一个目标,它将打包二进制文件.但是,目前,似乎Clover检测类正在与我希望在jar中打包的未检测类相同的输出目录中生成.
我如何创建一个jar,以便不包括检测类?有没有办法改变检测类的吐出位置?或者,打包一个不包含已检测类的jar的唯一方法是重新编译所有内容?
我尝试使用三叶草设置目标的tmpdir属性,但似乎没有任何效果.
我们正在考虑在开发过程中使用这些工具之一.我们的环境广泛使用mvn和eclipse.
您认为哪一个是检查测试覆盖率的最佳实用程序?我意识到可能取决于情况来确定何时使用cobertura而不是三叶草,反之亦然.
提前致谢
我目前正在评估三叶草,并想知道如何最好地使用它.首先,我想了解它在概念上是如何运作的.
1)仪器是什么意思?测试调用是否附加到实现的语句中?
2)这是怎么做到的?这些测试实际上是用一些花哨的执行上下文(类似于JRebel)执行的吗?还是更像静态分析?
3)在"三叶草运行"之后,一些数据库被保存到磁盘,并在此基础上生成报告吗?DB格式是否可访问?我的意思是我可以在其上启动我自己的分析,例如使用我自己的报告工具吗?数据库包含哪些信息?我能看到测试和实现之间的映射吗?
4)是否有其他工具可以找到测试和实现之间的映射?不只是数字,而是测试,实际上涵盖了一行代码......
谢谢,巴斯特尔.
我有几个关于项目的不同扩展的clover.xml报告.我想将它们组合成一个clover.xml,然后将其创建为三叶草html.但我看不到出路与PHPUnit的类PHP_CodeCoverage
,PHP_CodeCoverage_Report_HTML
,PHP_CodeCoverage_Report_Clover
.
这些类都不接受现有的clover.xml.我以为我可以使用方法追加和合并PHP_CodeCoverage
.但那不接受文件.
尽管phpunit支持该--coverage-clover [file]
参数,但似乎什么也没做。
我有Jenkins在此服务器上运行,带有用于PHP的三叶草覆盖插件。
这是我的输出:
> phpunit --coverage-clover coverage.xml
................................ 32 / 32 (100%)
Time: 745 ms, Memory: 16.75Mb
> ls -l
(coverage.xml is not present)
Run Code Online (Sandbox Code Playgroud)
我正在寻找找出为什么根本没有生成三叶草XML文件且没有错误消息的原因。即使使用该--debug
标志也不会产生与三叶草报告相关的信息。
版本信息:
> phpunit --version
PHPUnit 5.0.5 by Sebastian Bergmann and contributors.
> php --version
PHP 5.6.14-1+deb.sury.org~trusty+1 (cli)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with the ionCube PHP Loader + Intrusion Protection from ioncube24.com v.5.0.4, Copyright (c) 2002-2015, by ionCube Ltd.
with Zend …
Run Code Online (Sandbox Code Playgroud) 在启用了三叶草配置文件的情况下调用 TestNG 单元测试用例时出现以下错误。没有改变任何三叶草版本。不知道为什么会发生。
这是我的库详细信息 - clover-4.0.3、testng - 6.0.1、maven 3
Caused by: java.lang.NoClassDefFoundError: com_atlassian_clover/TestNameSniffer
at com.mds404.catalog.infrastructure.entity.ModelBase.<clinit>(ModelBase.java:27)
at sun.reflect.GeneratedSerializationConstructorAccessor1.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.newInstance(SunReflectionFactoryInstantiator.java:40)
at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:59)
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxy(ClassImposterizer.java:111)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:51)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:52)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:41)
at org.mockito.Mockito.mock(Mockito.java:1014)
at org.mockito.Mockito.mock(Mockito.java:909)
at com.mds404.rest.v2.controller.BaseControllerTest.<init>(BaseControllerTest.java:107)
... 33 more
Caused by: java.lang.ClassNotFoundException: com_atlassian_clover.TestNameSniffer
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.maven.surefire.booter.IsolatedClassLoader.loadClass(IsolatedClassLoader.java:97)
... 46 more
Run Code Online (Sandbox Code Playgroud)