[Delphi] DUnit を使ってみる

テストの効率化をねらって、DUnit を試してみたので、DUnit テストプロジェクト作成の手順をまとめてみた。

  1. DUnit をダウンロードする。
    http://dunit.sourceforge.net/
  2. テストプロジェクトを作成する。
    ファイル|新規作成|アプリケーション
  3. フォームを削除する。
  4. ユニットを追加する。:ファイル|新規作成|ユニット
  5. 下記のようにプロジェクトソースを編集する
    1. uses 節に以下の 2 ユニットを追加する。
      TestFramework, GUITestRunner
      
    2. 以下の 3 行を削除する
      Application.Initialize;
      Application.CreateForm(TForm2, Form2);
      Application.Run;
      
    3. 以下の行を追加する
      GUITestRunner.runRegisteredTests;
      
    4. 編集後、下記のようになる。
      program UnitTest;
      
      uses
        Forms,
        TestFramework,
        GUITestRunner,
        UUnitTest1 in 'UUnitTest1.pas';
      
      {$R *.res}
      
      begin
      	GUITestRunner.runRegisteredTests
      //	Application.Initialize;
      //	Application.CreateForm(TForm1, Form1);
      //	Application.Run;
      end.
      
  6. 下記のようにテストユニットを作成する
    unit UUnitTest1;
    
    interface
    
    uses
    	TestFramework, GUITestRunner;
    
    type
    	TTestUnit1= class(TTestcase)
    	protected
    		procedure SetUp; override;
    		procedure TearDown; override;
    	published
    		procedure Case_TestOK1; virtual;
    		procedure Case_TestOK2;
    		procedure Case_TestNG1; virtual;
    	end;
    
    implementation
    
    procedure TTestUnit1.SetUp;
    begin
    end;
    
    procedure TTestUnit1.TearDown;
    begin
    end;
    
    procedure TTestUnit1.Case_TestNG1;
    begin
    	check(false, 'TTestUnit1error');
    end;
    
    procedure TTestUnit1.Case_TestOK1;
    begin
    	check(true, '');
    end;
    
    procedure TTestUnit1.Case_TestOK2;
    begin
    	check(true, '');
    end;
    
    initialization
    	TestFramework.RegisterTest('', TTestUnit1.Suite);
    
    end.
    

上記は最も基本的な例なので、実際にはテストする内容に合わせて、テストクラス&メソッドを作成する。
テストメソッドは、published スコープにすること。

テストクラスのデフォルトメソッド:

メソッド名 メソッド説明
SetUp テストの準備作業を行う
TearDown テストの後始末を行う

Checkメソッドの説明:

順序 メソッド説明
1 テスト結果:true = テストOK、false = テストNG
2 エラー時のメッセージ

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0062