三叶草:它是如何工作的?

时间:2012-10-04 08:41:01

标签: java unit-testing clover

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

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

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

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

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

谢谢,Bastl。

2 个答案:

答案 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都有一个内置。