你可以这样做,但这确实是错误的方法。您正在重新发明轮子,并为自己错过测试内容做好准备,因为您无法始终如一且可靠地重复测试。
测试应该是可重复的,并且应该始终使用尽可能多的测试选项,每次发生变化时可以测试这些选项,以确保您不会引入错误(或放回之前修复的错误),并且允许您轻松支持新的选项或参数或值。
您应该使用DUnit
(Delphi unit testing),它现在包含在 Delphi 中的几个版本中(并且可用于SourceForge的早期版本),它允许您自动化测试过程,并包括一个TreeView
显示测试设置(称为Suites
)、单个测试组成该套件,以及每个测试的结果。它允许您测试应该起作用的东西和不应该起作用的东西(并确保它们不起作用),并始终如一地重复测试,这样您就不会错过任何东西。它还为您提供有关任何失败的测试的信息,以及帮助您找到(并修复)失败条件的信息。
在已经包含的 Delphi 版本中DUnit
(我相信这是从 Delphi 2007 及更高版本开始的任何内容),用于File->New->Other->Unit Tests->Test Project
创建 shell。对于非基于类的测试,创建另一个新单元并手动设置测试。这是一个供您开始使用的 shell,其中包含对两个无意义函数的测试:
unit MyFunctionsTests;
{
Delphi DUnit Test Case Skeleton Unit
}
interface
uses
TestFramework, MyFunctions;
type
// Test methods for MyFunctions unit
// In the real world, you'd create separate test cases,
// one for tests that should pass and one for tests that
// should fail, and run them separately or in succession.
// This is just a simple shell.
TTestMyFunctions = class(TTestCase)
strict private
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestFunctionOne;
procedure TestFunctionTwo;
end;
implementation
procedure TTestMyFunctions.Setup;
begin
// Do any necessary initializations, set variables, etc.
end;
procedure TTestMyFunctions.TearDown;
begin
// Free any objects, release any memory, etc. here
end;
procedure TTestMyFunctions.TestFunctionOne;
begin
// FunctionOne takes two integers and adds them, and
// returns the sum
CheckTrue(FunctionOne(1, 1) = 2); // Test success
CheckFalse(FunctionOne(2, 2) = 5); // Test failure
end;
procedure TTestMyFunctions.TestFunctionTwo;
begin
CheckEqualsString('AB', FunctionTwo('A', 'B')); // Success
CheckFalse(FunctionTwo('B', 'A') = 'AB'); // Failure
end;
initialization
// Register any test cases with the test runner
RegisterTest(TTestMyFunctions.Suite);
end.
使用Project->Add to Project
,并添加您的单元 ( MyFunctions.pas
) 和新的测试用例单元(MyFunctionTests.pas
在上面的 shell 中)。它应该看起来像这样:
program MyFunctionUnitTests;
{
Delphi DUnit Test Project
-------------------------
This project contains the DUnit test framework and the GUI/Console test runners.
Add "CONSOLE_TESTRUNNER" to the conditional defines entry in the project options
to use the console test runner. Otherwise the GUI test runner will be used by
default.
}
{$IFDEF CONSOLE_TESTRUNNER}
{$APPTYPE CONSOLE}
{$ENDIF}
uses
DUnitTestRunner,
MyFunctions in '..\MyFunctions.pas',
MyFunctionsTests in 'MyFunctionsTests.pas';
{$R *.RES}
begin
DUnitTestRunner.RunRegisteredTests;
end.
现在运行项目,并在出现的窗口中单击绿色Play
按钮(如 Delphi IDE 中的运行按钮)或点击F9. 树形视图将向您显示测试的结果(绿色表示通过,红色表示失败)。如果测试失败,您可以在窗口底部查看该测试的错误信息。(如果不能,请使用View
窗口显示错误。)