6

我目前正在评估三叶草,想知道如何最好地使用它。首先,我想了解它在概念上是如何工作的。

1)仪表是什么意思?测试调用是否附加到实现的语句中?

2)这是怎么做的?测试实际上是用一些花哨的执行上下文(例如类似于 JRebel)执行的吗?还是更像静态分析?

3)在“三叶草运行”之后,一些数据库被保存到磁盘,并基于此生成报告,对吗?DB-Format 可以访问吗?我的意思是我可以对它进行自己的分析,例如使用我自己的报告工具吗?数据库究竟包含什么信息?我可以在那里看到测试和实现之间的映射吗?

4)是否有其他工具可以找到测试和实现之间的映射?不仅是数字,而且哪个测试实际上涵盖了一行代码......

谢谢,巴斯特尔。

4

2 回答 2

6

这是怎么做到的?测试实际上是用一些花哨的执行上下文(例如类似于 JRebel)执行的吗?还是更像静态分析?

在 Clover 的代码检测期间,它会检测哪些方法是测试方法(默认情况下它识别 JUnit3/4 和 TestNG)。此类方法获得额外的检测指令。简而言之,输入一个测试方法通常会实例化一个专用的覆盖率记录器,它专门为这个测试测量覆盖率。有关 Clover 中可用的每个测试记录策略的更多信息:

在“三叶草运行”之后,一些数据库被保存到磁盘,并基于此生成报告,对吗?

Clover 数据库 (clover.db) 包含有关代码结构(包、文件、类、方法、语句、分支)的信息,它还包含有关测试方法的信息。还有单独的覆盖记录文件(在运行时生成)包含有关给定代码元素的“命中”次数的信息。Clover 支持全局覆盖(即整个运行)以及每个测试的覆盖(即单个测试的覆盖)。

更多信息在这里:

DB-Format 可以访问吗?

API 仍在开发中(https://jira.atlassian.com/browse/CLOV-1375),但有可能获取基本信息。看:

有关数据库模型和代码示例的更多详细信息。

但问题是:你真的需要手动读取这个数据库吗?你写道:

我可以在那里看到测试和实现之间的映射吗?

Clover 已经提供了这样的映射 - 例如,在 HTML 报告中,如果您单击源代码行,它将弹出一个命中该行的测试方法列表。

PS:我是 Atlassian 的 Clover 开发人员,如果您有任何问题,请随时与我联系。

于 2013-11-05T21:35:37.923 回答
2

仪表是什么意思?

附加代码与您的代码交织在一起。

测试调用是否附加到实现的语句中?

我不确定你的意思,但它可能是指令或方法调用。简单的方法将在运行时由 JIT 内联。

这是怎么做到的?

有很多方法可以做到这一点,但通常使用 Instrumentation 类来捕获加载类的时间,并使用 Objectweb 的 ASM 之类的库来操作代码。

测试实际上是在一些花哨的执行上下文中执行的吗

上下文计算哪些行已被执行。

还是更像静态分析?

不,它是基于所谓的。

在“三叶草运行”之后,一些数据库被保存到磁盘,并基于此生成报告,对吗?DB-Format 可以访问吗?

你最好向 clover 的生产者询问他们文件的内容。

是否有其他工具可以找到测试和实现之间的映射?不仅是数字,而且哪个测试实际上涵盖了一行代码......

有许多代码覆盖工具可用,包括 EMMA、JaCoCo、Cobertura,IDEA 有一个内置工具。

于 2012-10-04T08:54:53.167 回答