除了DUnit之外,Delphi中用于单元测试的最佳工具

时间:2011-04-12 22:28:46

标签: delphi unit-testing

您建议在Delphi中使用哪些工具进行单元测试 我使用FastMM4进行内存泄漏测试 而MadExcept,都是规则,但它并没有帮助我测试我的程序中的逻辑 我想要一些替代品,所以不要急于建议DUnit: - )。

有什么建议吗?

3 个答案:

答案 0 :(得分:9)

最常用的是DUnit。它实际上包含在Delphi的现代版本中,但是如果您的版本没有附带它,您可以从Sourceforge下载它。

答案 1 :(得分:8)

DUnit附带D2007。

- >文件 - >新增 - >其他

从弹出的对话框中选择单元测试。

有几个很好的演示视频正在使用,我会看看我是否可以挖一个。

这是一个非常好的,其他人出现在右边:

http://www.youtube.com/watch?v=nyZnfxDqThE

答案 2 :(得分:7)

您可以查看我们SynCommons open source unit中提供的单元测试类。它在我们的开源框架中用于所有回归测试。它可能不是最好的,但值得一看。见http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

在即将推出的1.13版本中,还有一种新的日志记录机制,其中包含任何引发异常的堆栈跟踪,就像MadExcept一样,使用.map文件内容作为源。

它现在由单元测试类使用,因此任何失败都会在日志中创建一个包含源代码行和堆栈跟踪的条目:

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) 

没有伐木的测试服和带测井的测试服的区别仅在于:

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

日志记录机制可用于跟踪递归调用。当您进入和离开任何方法时,它可以使用基于接口的机制进行记录:

procedure TMyDB.SQLExecute(const SQL: RawUTF8);
var ILog: ISynLog;
begin
  ILog := TSynLogDB.Enter(self,'SQLExecute');
  // do some stuff
  ILog.Log(sllInfo,'SQL=%',[SQL]);
end; // when you leave the method, it will write the corresponding event to the log

它将被记录为:

20110325 19325801  +    MyDBUnit.TMyDB(004E11F4).SQLExecute
20110325 19325801 info   SQL=SELECT * FROM Table;
20110325 19325801  -    MyDBUnit.TMyDB(004E11F4).SQLExecute 

此处方法名称在代码中设置('SQLExecute')。但是如果你有一个关联的.map文件,那么日志记录机制就能读取这个符号信息,并写下事件的确切行号。

请注意,默认情况下,您将时间和日期写入日志,但也可以使用高分辨率时间戳替换此时间。有了这个,您将能够使用来自客户端的数据在其真实计算机上分析您的应用程序。通过Enter方法(及其自动离开功能),您可以获得所需的所有信息。 ;)

像这样:

0000000000000B56  +    TTestCompression(00AB3570).000E6C79 SynSelfTests.TTestCompression.TestLog (376) 
0000000000001785  -    TTestCompression(00AB3570).000E6D09 SynSelfTests.TTestCompression.TestLog (385) 

我仍然需要编写一些工具来计算分析,但是已经有一个专用的TSynLogFile类能够读取.log文件并识别其内容。

第一次读取.map文件时,会创建一个.mab文件,该文件将包含所需的所有符号信息。您可以将带有.exe的.mab文件发送到您的客户端,或者甚至将其内容嵌入到.exe中。此.mab文件已优化:927,984字节的.map压缩为71,943 .mab文件。

因此,在纯OpenSource中,这个单位可以被认为是DUnit和MadExcept婚礼的自然孩子。 :)

其他信息为available on our forum。随意问。欢迎提供反馈和功能请求!适用于Delphi 6至XE。