有没有办法用DUnit测量代码覆盖率?或者是否有任何免费工具实现?你用的是什么?你通常会使用什么代码覆盖?
Jim McKeeth:谢谢你的详细解答。我说的是TDD方法意义上的单元测试,不仅仅是发生故障后的单元测试。我对一些基本的预写单元测试可以实现的代码覆盖感兴趣。答案 0 :(得分:24)
我刚刚在Google Code上创建了一个新的开源项目,其中包含Delphi 2010的基本代码覆盖工具。https://sourceforge.net/projects/delphicodecoverage/
现在它可以测量线路覆盖范围,但我也计划添加类和方法覆盖范围。
它生成html报告,其中包含摘要和标记的源,显示哪些行被覆盖(绿色),哪些不是(红色),其余行没有为它们生成任何代码。< / p>
<强>更新强> 从Delphi Code Coverage版本0.3开始,您可以生成与Hudson EMMA插件兼容的XML报告,以在Hudson内显示代码覆盖率趋势。
<强>更新强> 版本0.5带来了错误修复,增强的可配置性和清理报告
<强>更新强> 版本1.0支持emma输出,类和方法的覆盖以及DLL和BPL的覆盖
答案 1 :(得分:11)
我不知道有任何免费工具。 AQTime几乎是分析Delphi的事实标准。我没有使用它,但快速搜索Discover for Delphi,现在是开源的,但只是代码覆盖。
这些工具中的任何一个都可以让您了解单元测试所获得的代码覆盖率。
答案 2 :(得分:7)
您是指单元测试或陈旧代码中的代码覆盖率吗?一般来说,我认为只有一个失败的可测试代码应该通过单元测试来覆盖(是的,我意识到可能会开始一场神圣的战争,但这就是我的立场)。所以这个比例很低。
另一方面,现在陈旧的代码是另一回事。陈旧的代码是不被使用的代码。你很可能不需要一个工具来告诉你很多你的代码,只需在Delphi中编译后查找小蓝点。任何没有蓝点的东西都是陈旧的。通常,如果没有使用代码,则应删除它。这将是100%的代码覆盖率。
还有其他场景用于陈旧代码,例如,如果您有特殊代码可以处理2月31日的日期。编译器不知道它不会发生,所以它编译它并给它一个蓝点。现在你可以为它编写一个单元测试,然后对它进行测试,它可能会工作,但是你只是第二次浪费你的时间(首先是编写代码,第二次是测试代码)。
有一些工具可以跟踪程序运行时使用的代码路径,但这只是可靠的,因为不是每次都会使用所有代码路径。就像你必须处理闰年的特殊代码一样,它只会每四年运行一次。因此,如果你把它拿出来,你的程序将每四年打破一次。
我想我并没有真正回答你关于DUnit和Code Coverage的问题,但我想我可能在你开始时给你留下了更多问题。您在寻找什么样的代码保险?
更新:如果您正在采用TDD方法,那么在您为其编写测试之前不会编写任何代码,因此本质上您有100个测试覆盖率。当然,仅仅因为每个方法都是通过测试来运行并不意味着它的整个行为范围都被运用了。 SmartInspect提供了一种非常简单的方法来测量调用哪些方法以及时间等。它比AQTime少一点,但不是免费的。有了更多工作,您可以添加工具来测量每个代码路径(“if”语句的分支等)当然,您也可以将自己的日志添加到您的方法中以实现覆盖率报告,这是免费的(好吧,期待你的时间,这可能比工具更有价值)。如果您使用JEDI Debug,那么您也可以获得一个调用堆栈。
TDD实际上不能轻易地追溯应用于现有代码而无需进行大量重构。虽然较新的Delphi IDE能够为每个公共方法生成单元测试存根,然后可以100%覆盖您的公共方法。你在这些存根中放入的内容决定了覆盖范围的有效性。
答案 3 :(得分:5)
我使用Discover for Delphi来完成工作,使用DUnit进行单元测试,使用TestComplete进行功能测试。
可以将Discover配置为从命令行运行以进行自动化。 如:
Discover.exe Project.dpr -s -c -m
答案 4 :(得分:2)
发现对我很有用。与AQTime不同,它几乎不会减慢您的应用程序速度。当然,这对你来说可能不是问题。我认为最近版本的AQTime在这方面表现更好。
答案 5 :(得分:1)
我多年来一直在使用Discover,工作得非常出色,包括BDS2006(这是我使用过的最后一个前XE *版本的Delphi版本),但它目前的开源状态,目前还不清楚如何制作它适用于Delphi的XE *版本。真的很遗憾,因为我喜欢这个工具,几乎在所有方面都快速方便。 所以现在我要转向delphi-code-coverage ...