有什么方法可以用DUNIT测量代码覆盖范围?还是有任何免费工具来完成?你用什么?您通常会选择什么代码覆盖范围?

吉姆·麦基斯(Jim McKeeth):感谢您的详细答案。我说的是从TDD方法的意义上进行单位测试,不仅是发生故障后的单位测试。我对一些基本的预编辑单元测试可以实现的代码覆盖范围感兴趣。

有帮助吗?

解决方案

我刚刚在Google代码上创建了一个新的开源项目,并使用Delphi 2010的基本代码覆盖工具创建了一个新的开源项目。 https://sourceforge.net/projects/delphicodecoverage/

现在,它可以测量线路覆盖范围,但我计划也添加类和方法覆盖范围。

它生成了HTML报告,并具有摘要以及标记的来源,显示您覆盖了哪些行(绿色),这些行(绿色),其余的行没有为它们生成任何代码。

更新:从0.3版开始 Delphi代码覆盖范围 您可以生成与Hudson Emma插件兼容的XML报告,以显示内部代码覆盖趋势 哈德森.

更新:版本0.5带来错误修复,增加可配置性和清理报告

更新:1.0版带来了对Emma输出的支持,类和方法的覆盖范围以及DLL和BPL的覆盖范围

其他提示

我不知道有任何免费工具。 aqtime 几乎是对Delphi进行分析的Defatto标准。我没有使用过,但是找到了快速搜索 发现Delphi, ,现在是开源的,但只需进行代码覆盖范围。

这些工具中的任何一个都应使您了解单元测试获得多少代码覆盖率。

您是指单元测试或陈旧代码的代码覆盖范围吗?通常,我认为只有单位测试才能涵盖故障的可测试代码(是的,我意识到这可能正在开始圣战,但这就是我的立场)。因此,这将是一个很低的百分比。

另一方面,现在陈旧的代码是另一回事。陈旧代码是未使用的代码。您很可能不需要工具来告诉您很多代码,只需在Delphi编译后寻找小蓝点即可。没有蓝色点的任何东西都是陈旧的。通常,如果不使用代码,则应将其删除。因此,这将是100%的代码覆盖范围。

陈旧代码还有其他方案,例如如果您有特殊的代码可以处理,如果日期在2月31日降落。编译器不知道它不会发生,因此它将其编译成并给它一个蓝色点。现在,您可以为此编写一个单元测试,然后对其进行测试并可能工作,但是您只是第二次浪费时间(首先要编写代码,其次进行测试)。

有一些工具可以跟踪程序运行时使用哪些代码路径,但这仅是可靠的,因为并非每次都会使用所有代码路径。就像您必须处理leap年的特殊代码一样,它将每四年运行一次。因此,如果您将其取出,那么您的程序将每四年打破。

我想我并没有真正回答您关于Dunit和代码覆盖范围的问题,但是我想我可能会留下更多问题,然后您就开始了。您正在寻找哪种代码覆盖范围?

更新: 如果您正在采用TDD方法,则在为其编写测试之前,没有编写代码,因此您本质上有100个测试覆盖率。当然,仅仅因为每种方法都是通过测试行使的,并不意味着行为的整个行为范围。 Smartinspect 提供了一种非常简单的方法来测量哪些方法与时序等等。它比AQTime少一些,但不是免费的。有了更多的工作,您可以添加仪器来测量每个代码路径(“如果”语句等)当然,您也可以将自己的记录添加到您的方法中以获得覆盖范围,这是免费的(好吧,期望您的时间,这可能比工具的价值更多)。如果您使用绝地武士调试,则也可以获取呼叫堆栈。

如果没有大量重构,TDD确实不能轻易地追溯地应用于现有代码。尽管较新的Delphi IDE可以为每种公共方法生成单元测试存根,然后为您提供100%的公共方法覆盖范围。您放入这些存根的内容确定了覆盖范围的有效性。

我用 发现Delphi 它可以完成工作,用于使用DUNIT和功能测试的单位测试。

可以将发现配置为从命令行运行以进行自动化。如:

Discover.exe Project.dpr -s -c -m

发现对我有好处。与AQTime不同,它几乎不会减慢您的应用程序。当然,这对您来说可能不是问题。我认为AQTime的最新版本在这方面表现更好。

我一直在使用“多年来,在内的BDS2006(这是我使用且仍在使用的Delphi的最后一个版本),但它目前的开放状态,目前尚不清楚如何使其与之一起使用,我一直在使用Discover“多年来,这是我使用过和仍在使用的Delphi的最后一个版本) Xe*版本的Delphi。真的很遗憾,因为我喜欢这个工具,几乎所有方面都快速且方便。所以现在我搬到了Delphi-Code-Coverage ...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top