我正在评估三叶草,并想知道如何最好地使用它。首先,我想了解它在概念上是如何运作的。
1)仪器是什么意思?测试调用是否附加到实现的语句中?
2)这是怎么做到的?这些测试实际上是用一些花哨的执行上下文(类似于JRebel)执行的吗?或者它更像静态分析?
3)在“三叶草运行”之后,一些数据库被保存到磁盘,基于此,报告生成对了吗? DB格式是否可访问?我的意思是我可以对它进行自己的分析,例如使用我自己的报告工具?数据库包含哪些信息?我可以在那里看到测试和实现之间的映射吗?
4)是否有其他工具可以找到测试和实现之间的映射?不只是数字,而是哪个测试,实际上涵盖了一行代码......
谢谢,Bastl。
答案 0 :(得分:6)
这是怎么做到的?这些测试实际上是用一些花哨的执行上下文(类似于JRebel)执行的吗?或者它更像静态分析?
在Clover的代码检测期间,它检测哪些方法是测试方法(默认情况下它识别JUnit3 / 4和TestNG)。这些方法获得额外的仪器指令。简而言之,进入测试方法通常会实例化专用覆盖记录器,该记录器专门测量该测试的覆盖范围。有关Clover中每种测试记录策略的更多信息:
在“三叶草运行”之后,某些数据库被保存到磁盘,并在此基础上生成报告吗?
Clover数据库(clover.db)包含有关代码结构(包,文件,类,方法,语句,分支)的信息,还包含有关测试方法的信息。还有单独的覆盖记录文件(在运行时产生),其包含关于给定代码元素的“命中”数量的信息。 Clover支持全局覆盖(即整个运行)以及每个测试覆盖(即来自单个测试的覆盖)。
更多信息请点击此处:
DB格式是否可访问?
API仍处于开发阶段(https://jira.atlassian.com/browse/CLOV-1375),但有可能获得基本信息。参见:
有关数据库模型和代码示例的更多详细信息。
但问题是:你真的需要手动阅读这个数据库吗?你写道:
我可以在那里看到测试和实现之间的映射吗?
此类映射已由Clover提供 - 例如,在HTML报告中,如果单击源行,它将弹出一个测试方法列表。
PS:我是Atlassian的Clover开发人员,如果您有任何问题,请随时与我联系。
答案 1 :(得分:2)
仪器是什么意思?
附加代码与您的代码编织在一起。
测试调用是否附加到实现的语句?
我不确定你的意思,但它可能是指示或调用方法。 JIT在运行时将内联简单的方法。
这是怎么做到的?
有很多方法可以做到这一点,但通常使用Instrumentation类来捕获何时加载类,并使用像Objectweb的ASM这样的库来操作代码。
测试是否实际执行了一些花哨的执行上下文
上下文计算已执行的行。
或者它更像静态分析?
不,它基于所谓的。
在“三叶草运行”之后,某些数据库被保存到磁盘,并在此基础上生成报告吗? DB格式是否可访问?
你最好问三叶草的制作人他们文件的内容。
是否有其他工具可以找到测试和实现之间的映射?不只是数字,而是哪个测试,实际上涵盖了一行代码......
有许多代码覆盖工具,包括EMMA,JaCoCo,Cobertura,IDEA都有一个内置。