我認爲你正在尋找的東西是這樣的:
unit TestCases;
interface
uses
SysUtils, TestFramework, TestExtensions;
implementation
type
TArithmeticTest = class(TTestCase)
private
FOp1, FOp2, FSum: Integer;
constructor Create(const MethodName: string; Op1, Op2, Sum: Integer);
public
class function CreateTest(Op1, Op2, Sum: Integer): ITestSuite;
published
procedure TestAddition;
procedure TestSubtraction;
end;
{ TArithmeticTest }
class function TArithmeticTest.CreateTest(Op1, Op2, Sum: Integer): ITestSuite;
var
i: Integer;
Test: TArithmeticTest;
MethodEnumerator: TMethodEnumerator;
MethodName: string;
begin
Result := TTestSuite.Create(Format('%d + %d = %d', [Op1, Op2, Sum]));
MethodEnumerator := TMethodEnumerator.Create(Self);
Try
for i := 0 to MethodEnumerator.MethodCount-1 do begin
MethodName := MethodEnumerator.NameOfMethod[i];
Test := TArithmeticTest.Create(MethodName, Op1, Op2, Sum);
Result.addTest(Test as ITest);
end;
Finally
MethodEnumerator.Free;
End;
end;
constructor TArithmeticTest.Create(const MethodName: string; Op1, Op2, Sum: Integer);
begin
inherited Create(MethodName);
FOp1 := Op1;
FOp2 := Op2;
FSum := Sum;
end;
procedure TArithmeticTest.TestAddition;
begin
CheckEquals(FOp1+FOp2, FSum);
CheckEquals(FOp2+FOp1, FSum);
end;
procedure TArithmeticTest.TestSubtraction;
begin
CheckEquals(FSum-FOp1, FOp2);
CheckEquals(FSum-FOp2, FOp1);
end;
function UnitTests: ITestSuite;
begin
Result := TTestSuite.Create('Addition/subtraction tests');
Result.AddTest(TArithmeticTest.CreateTest(1, 2, 3));
Result.AddTest(TArithmeticTest.CreateTest(6, 9, 15));
Result.AddTest(TArithmeticTest.CreateTest(-3, 12, 9));
Result.AddTest(TArithmeticTest.CreateTest(4, -9, -5));
end;
initialization
RegisterTest('My Test cases', UnitTests);
end.
看起來像這樣在GUI測試運行:
我會很有興趣知道,如果我已經以不理想的方式解決了這個問題。 DUnit非常全面和靈活,每當我使用它時,我總會感到我錯過了一個更好,更簡單的方法來解決問題。
你的意思是動態創建列表中所有輸入值的測試用例嗎?我的(小的)[OpenCTF](http://sourceforge.net/projects/openctf/)測試框架包含動態創建測試用例的代碼。它基於DUnit。 – mjn
您可以隨時在測試類中編寫一個通用參數化方法,並從一個或多個特定(已發佈)的測試方法中調用該方法。 TestCase的Check(Not)Equals方法也可以幫助在這裏幫助保持代碼簡潔,並且仍然爲每個測試提供特定的失敗消息。 –
@Marjan只要第一個Check(Not)Equals失敗,測試方法就會停止執行 - 動態創建測試用例解決了這個問題,所有其他值仍將被測試 – mjn