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