【问题标题】:clover: how does it work?三叶草:它是如何工作的?
【发布时间】:2012-10-04 08:41:01
【问题描述】:

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

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

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

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

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

谢谢,Bastl。

【问题讨论】:

  • 你能把它分解成几个问题吗?您可能已经在 SO 上找到了其中一些问题的答案。

标签: java unit-testing clover


【解决方案1】:

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

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

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

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

更多信息在这里:

可以访问 DB 格式吗?

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

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

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

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

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

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

【讨论】:

  • 谢谢 Marek,我接受了你的回答,但遗憾的是这个话题对我来说已经过时了。
【解决方案2】:

仪表是什么意思?

其他代码与您的代码交织在一起。

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

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

这是怎么做到的?

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

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

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

还是更像静态分析?

不,它是基于所谓的。

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

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

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

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

【讨论】:

  • 关于最后一个:我专门询问测试实现和实际代码之间的映射。是否有任何工具提供了这一点?例如。我可以看到一条线(1,5 mio LOC)被覆盖了,但是通过哪个测试!?
  • 如果你运行一个给定的测试,它会显示你想要它覆盖。如果您使用调试器,您可以查看运行特定行的测试。我不清楚你为什么要一起知道哪些测试运行哪些行,因为这似乎并不关注特定问题。
  • Clover HTML 报告会告诉你每一个命中一行代码的测试。请参阅屏幕截图 #3 - atlassian.com/software/clover/overview/screenshot-tour
  • @PeterLawrey:我会给你一个假设的问题,你需要知道给定测试命中了哪些 LOC:如果你想以编程方式知道哪些测试有相当大的重叠。我正在开发一种工具来检测具有大量重叠的单元测试,以便自动查找测试相同事物的测试,其中一部分需要知道测试命中的特定 LOC。
  • @AdamParkin:听起来很有趣!可以分享一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 2011-04-04
  • 2011-12-09
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多