2

Embarcadero XE2 を使用して Delphi でライブラリを作成しました。関数とプロシージャをテストしたいのですが、数が多すぎます (50 以上)。これらのライブラリをテストするためのフォームを作成したいと思います。左側に関数のリスト (オプションのようなツリービュー) があり、フォームの右側にオプションのテキスト ボックスと起動ボタンがあります。Web でツリービューのチュートリアルをいくつか見つけましたが、ツリービューでデータベースを視覚化していました。

ツリービューは必要ありません。関数の可能な列挙は素晴らしいでしょう。

非常に多くの機能をテストする簡単な方法はありますか? このテスト (フォーム) を実装する簡単な方法はありますか?

私のライブラリは OpenOffice.org API のリフレクターであり、主に関数ではなくプロシージャで構成されており、単体テスト フレームワークでテストするのは難しいため、このクラスをテストするための GUI を作成するとよいでしょう。手動でそれらがどのように機能するか。この種のテストの解決策はありますか?

4

2 に答える 2

6

これを行うこともできますが、それは実際には間違ったアプローチです。一貫して確実にテストを繰り返すことができないため、車輪を再発明し、テストの欠落に備えることになります。

テストは反復可能である必要があり、何かが変更されるたびにテストできる可能な限り多くのテストオプションを常に実行して、バグを導入しないようにする (または以前に修正したバグに戻す) 必要があります新しいオプション、パラメーター、または値を簡単にサポートできます。

( DUnit Delphi 単体テスト) を使用する必要があります。現在、いくつかのバージョンの Delphi に含まれています (および SourceForge の以前のバージョンで利用可能) 。これにより、テスト プロセスを自動化できます。そのスイートを構成するものと、各テストの結果です。これにより、動作するはずのものと動作しないものをテストし (そして動作しないことを確認し)、一貫してテストを繰り返して、何も見逃さないようにすることができます。また、失敗したテストに関する情報と、失敗した状態を見つける (および修正する) のに役立つ情報も提供します。TreeViewSuites

すでにインクルードされている Delphi のバージョンDUnit(Delphi 2007 以降で始まるものだと思います) ではFile->New->Other->Unit Tests->Test Project、シェルの作成に使用します。クラス ベースではないテストの場合は、別の新しいユニットを作成し、テストを手動で設定します。これは、2 つの意味のない関数のテストを含む、最初に使用するシェルです。

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.pasMyFunctionTests.pas

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ウィンドウを使用してエラーを表示します。)

于 2013-05-30T14:36:57.613 に答える
3

代わりにDunitを使用してください。本当に、あなたはすべきです。それがそのためです。 http://dunit.sourceforge.net/README.html

少し学習曲線がありますが、一度理解すると「ああああ!」となるでしょう。

于 2013-05-30T14:26:35.123 に答える