delphiunit testing – 你好吗?

我想知道这里的几个Delphi用户如何进行unit testing? 是否有任何与您find的IDE集成的工作良好? 如果没有,你使用什么工具,你有或知道示范微型项目,说明如何运作?

更新:

我忘了提到我使用的是BDS 2006 Pro,虽然我偶尔会使用Delphi 7,当然其他人也可能使用其他版本。

DUnit是与win32 Delphi一起使用的xUnittypes的unit testing框架。 自从Delphi 2005 DUnit被集成到IDE的一个certan点。 其他的用于Delphi IDE的DUnit集成工具可以在这里find。 DUnit附带示例文档 。

有一些DUnit的附件,也许这是值得的SO上的新条目。 我现在可以列出的两个是

  1. FastMM4集成:unit testing会自动检测内存泄漏(和其他事情),适用于DUnit 9.3和更新版本
  2. OpenCTF是基于DUnit的“组件testing框架”,它为项目的表单,框架和数据模块中的所有组件dynamic创buildtesting,并使用自定义规则(开源)

替代文字http://www.mikejustin.comhttp://img.dovov.comOpenCTF.gif

DUnit2可从http://members.optusnet.com.au/~mcnabp/下载;

DUnit2的修改比原来的dunit更有规律。 它也适用于Delphi 2009。

尝试: http : //sourceforge.net/projects/dunit2/ – 它几年前的原作者Peter McNab去世了。 还有一些在dunit邮件列表上的活动。

你可以看看我们SynCommons开源部门提供的unit testing课程。 它在我们的开源框架中用于所有的回归testing。 这可能不是最好的,但值得一看。

http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

为了实现一个unit testing,你只需要通过创build一个类来声明一个新的testing用例:

type TTestNumbersAdding = class(TSynTestCase) published procedure TestIntegerAdd; procedure TestDoubleAdd; end; procedure TTestNumbersAdding.TestDoubleAdd; var A,B: double; i: integer; begin for i := 1 to 1000 do begin A := Random; B := Random; CheckSame(A+B,Adding(A,B)); end; end; 

然后你创build一个testing套装,并运行它。

在最新的1.13版本中,还有一个新的日志logging机制,带有任何引发exception的堆栈跟踪,就像MadExcept一样,使用.map文件内容作为源。

它现在被unit testing类使用,所以任何失败都会在源代码行和堆栈跟踪日志中创build一个条目:

 C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13) Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545 TSynLogTest 1.13 2011-04-13 05:40:25 20110413 05402559 fail TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163) 

没有logging的testing套装和loggingtesting套装之间的区别仅在于:

 procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase); begin inherited; with TestCase[fCurrentMethod] do fLogFile.Log(sllFail,'%: % "%"', [Ident,TestName[fCurrentMethodIndex],msg],aTest); end; 

日志logging机制可以做的不仅仅是loggingtesting:您可以logging方法的recursion调用,select您想要在日志中显示的信息,从客户端剖析应用程序,将已发布的属性,TList或TCollection内容编写为JSON日志内容,等等…

第一次读取.map文件时,会创build一个.mab文件,并且将包含所需的所有符号信息。 您可以将带有.exe的.mab文件发送到您的客户端,甚至可以将其内容embedded到.exe中。 该.mab文件进行了优化:927,984字节的.map被压缩为71,943.mab文件。

所以这个单位可以被认为是纯粹的OpenSource中的DUnit和MadExcept婚礼的天然孩子。 🙂

其他信息可在我们的论坛上find 。 随意问。 欢迎反馈和function要求! 从Delphi 6直到XE。

现在正在开发的Delphi版本有一个新的unit testing框架: https : //github.com/VSoftTechnologies/DUnitX

通常我创build一个unit testing项目(文件 – >新build – >其他 – >unit testing – >testing项目)。 它包含了我所需要的东西,所以到目前为止已经足够好了。

我使用delphi2007年,所以我不知道这是否是在2006年。

我们使用DUnit对所有逻辑代码进行unit testing,并使用AQTime中包含的代码覆盖率分析器来检查通过代码执行的所有path。

我们有两种方法,首先是运行Dunittesting,购买开发人员 – 这些确保刚刚更改的代码仍然可以像以前一样工作。 另一种方法是使用CruiseControl.NET构build可执行文件,然后在每次进行更改时运行dunittesting,以确保没有意外的更改后果。

我们的大部分代码库都没有testing,所以自动testing是一个持续发展的例子,以确保我们的应用程序按照我们的想法运行。

我们试图在Delphi 5中使用DUnit,但是效果不好。 特别是如果您正在实现COM接口,我们发现许多依赖关系来设置所有的testing基础架构。 我不知道testing支持是否在新版本中有所改进。