2012-04-06 75 views
4

德爾福是否有相當於DocTest的版本?我使用DUnit,但我喜歡Python DocTest的想法。我看到一些像here這樣的答案,但我認爲,對於簡單的函數,DocTest可能是可以的。 我的目標是在編寫函數時在評論標題中定義我的測試。 像:相當於Delphi中的Python DocTest?

function Plus(i1, i2 : integer) : integer; 
//>>> Check(Plus(1, 3) = 4) 
begin 
    result := i1 + i2; 
end; 
+1

我從來沒有碰到類似Delphi的東西。由於該語言的動態特性,它在Python中更容易。 – 2012-04-06 10:14:09

+0

不完全一樣,但在最近的博客中,Jordi Corbilla提出了使用'TCustomAttributes'進行單元測試的想法。請參閱[dunit-and-tcustomattributes](http://thundaxsoftware.blogspot.se/2012/04/dunit-and-tcustomattributes.html)。不是在評論中添加測試,而是將其作爲屬性應用。 – 2012-04-06 10:42:28

+0

@LURD這篇不錯的文章是相關的,但是還有很多代碼要寫:屬性必須有一組固定的參數。 – 2012-04-06 12:18:27

回答

2

的想法是,你可以用一個「控制檯」來輸出一些結果,以測試代碼,然後比較輸出文本內容的預期值。請參考regression tests available with the great DWSScript Open Source project。你會發現一些.pas文件和一些相關的.txt文件。

例如abs.pas:

var vf = 1.5; 
var vi = 2; 

var i : Integer := Abs(-vi); 
PrintLn(i); 
PrintLn(Abs(vi)); 

var f : Float := Abs(-vf); 
PrintLn(f); 
PrintLn(Abs(vf)); 

和相應的abs.txt內容:

2 
2 
1.5 
1.5 

AFAIK有是現在還沒有已經存在的解決方案在德爾福世界接軌。

在評論中寫入測試將缺乏IDE自動完成功能,並且會在某種程度上破壞對象pascal設計。這對DWS來說很簡單,但需要調用命令行的Delphi編譯器。老實說,我沒有看到自己的一套專門用於測試的單元有什麼問題。具有固定值和隨機值的for..to循環的一小段代碼將具有比固定參數集合好得多的測試覆蓋率。

+0

你好Arnaud。我的問題不是'如何將結果發送到控制檯',而是'如何在函數頭部註釋中編寫測試腳本'。我將編輯我的問題... – philnext 2012-04-06 09:41:18

+0

@Arnaud我很努力地看到這些與Python doctest有什麼相似之處,但也許我錯過了一些東西。 – 2012-04-06 10:10:56

+0

@philnext這不是一個真正的控制檯,而是一個虛擬控制檯,用於測試目的。您可以在函數頭註釋中編寫內容,然後使用DWS運行它(在DWS的情況下)。但是,當然,您需要編譯測試源代碼(使用dcc.exe)。要使源解析器提取標題,請參閱[the castalia parser](https://github.com/jacobthurman/Castalia-Delphi-Parser)。 – 2012-04-06 12:14:53