DUnit の概要

提供: RAD Studio
移動先: 案内検索

アプリケーションのテスト:インデックス への移動

注意: Bear in mind that DUnit does not support the FireMonkey GUI to view your output; use DUnitX instead.
メモ: DUnitX は Delphi 言語機能で、C++ ではサポートされていません。 C++ 開発者の場合は、DUnit がベストなツールとなります。 C++ can also be tested using other frameworks such as Google Test, available via GetIt パッケージ マネージャ.

DUnit は、JUnit テスト フレームワークに基づくオープンソースのユニット テスト フレームワークです。DUnit フレームワークを使用して、Delphi Win32 アプリケーションに対するテストを作成および実行できます。RAD Studio に DUnit フレームワークが統合されていることにより、Delphi Win32 アプリケーションおよび C++Builder アプリケーションのテストを作成して実行することができます。

DUnit テスト フレームワークには、さまざまな条件をテストできるメソッドが一式用意されています。メソッドは、よく使用されるアサーションを表します。また、カスタム アサーションを作成することもできます。用意されているメソッドを使用して、多数の条件をテストできます。

Also, see the DUnit home page at http://dunit.sourceforge.net/

DUnit のインストール

To install the DUnit feature follow these steps:

  1. [ツール|プラットフォームの管理]を選択し、機能マネージャを開きます。
  2. [追加オプション]タブで、DUnit テスト フレームワーク機能にチェックをつけて、それを RAD Studio インストール機能に追加します。
  3. [適用]を選択し、選択した変更を適用します。

変更が適用されたら、機能マネージャ[操作完了]の画面が表示されます。

Delphi 版 DUnit テストの作成

すべての DUnit テストは TTestCase 型のクラスを実装します。

次のサンプル Delphi Win32 プログラムでは、単純な加算と減算を実行する 2 つの関数を定義しています。

 unit CalcUnit;
 
 interface
 
 type
 
 { TCalc }
 
   TCalc = class
   public
     function Add(x, y: Integer): Integer;
     function Sub(x, y: Integer): Integer;
   end;
 
 implementation
 
 { TCalc }
 
 function TCalc.Add(x, y: Integer): Integer;
 begin
   Result := x + y;
 end;
 
 function TCalc.Sub(X, Y: Integer): Integer;
 begin
   Result := x - y;
 end;
 
 end.

次に、テスト ケース スケルトン ファイルの例を示します。前のコードに含まれている AddSub の 2 つの関数をテストするには、このスケルトンを変更します。

 unit TestCalcUnit;
 
 interface
 
 uses
   TestFramework, CalcUnit;
 type
   // Test methods for class TCalc
   TestTCalc = class(TTestCase)
   strict private
     aTCalc: TCalc;
   public
     procedure SetUp; override;
     procedure TearDown; override;
   published
     procedure TestAdd;
     procedure TestSub;
   end;
 
 implementation
 
 procedure TestTCalc.SetUp;
 begin
   aTCalc := TCalc.Create;
 end;
 
 procedure TestTCalc.TearDown;
 begin
   aTCalc := nil;
 end;
 
 procedure TestTCalc.TestAdd;
 var
   _result: System.Integer;
   y: System.Integer;
   x: System.Integer;
 begin
   _result := aTCalc.Add(x, y);
   // TODO: Add testcode here
 end;
 
 procedure TestTCalc.TestSub;
 var
   _result: System.Integer;
   y: System.Integer;
   x: System.Integer;
 begin
   _result := aTCalc.Sub(x, y);
   // TODO: Add testcode here
 end;
 
 initialisation
   // Register any test cases with the test runner
   RegisterTest(TestTCalc.Suite);
 end.

C++ の DUnit テストの作成

すべての DUnit テストは TTestCase 型のクラスを実装します。

次の C++ Win32 ヘッダー ファイルとプログラムのサンプルでは、単純な加算と減算を実行する 2 つの関数を定義します。

 #ifndef Unit7H
 #define Unit7H
 //-------------------------------------------------
 
 
 class TCalc
 {
 public:
   int Add(int x, int y);
   int Sub(int x, int y);
 };
 
 
 #endif

次の例(TestUnit7.cpp)には TCalc クラス用の Testcase が含まれます。ウィザードでこのサンプルが生成されますが、ユーザーが AddSub 関数を実行するテストを記述することが想定されています。この例ではユニット テスト用の DUnit の骨組みを示します。

 #include <vcl.h>
 #pragma hdrstop
 
 #include <TestFramework.hpp>
 
 class TTestTCalc : public TTestCase
 {
 public:
   __fastcall virtual TTestTCalc(AnsiString name) : TTestCase(name) {}
   virtual void __fastcall SetUp();
   virtual void __fastcall TearDown();
 
 __published:
   void __fastcall TestAdd();
   void __fastcall TestSub();
 };
 
 
 void __fastcall TTestTCalc::SetUp()
 {
 }
 
 void __fastcall TTestTCalc::TearDown()
 {
 }
 
 void __fastcall TTestTCalc::TestAdd()
 {
   // int Add(int x, int y)
 }
 
 void __fastcall TTestTCalc::TestSub()
 {
   // int Sub(int x, int y)
 }
 
 
 static void registerTests()
 {
   _di_ITestSuite iSuite;
   TTestSuite* testSuite = new TTestSuite("Testing Unit7.h");
   if (testSuite->GetInterface(iSuite)) {
     testSuite->AddTests(__classid(TTestTCalc));
     Testframework::RegisterTest(iSuite);
   } else {
     delete testSuite;
   }
 }
 #pragma startup registerTests 33

DUnit 関数

DUnit には、テストで使用できるさまざまな関数が用意されています。

関数 説明

Check

条件が満たされているかどうかを確認します。

CheckEquals

2 つの項目が等しいことを確認します。

CheckNotEquals

項目が等しくないことを確認します。

CheckNotNull

項目が null でないことを確認します。

CheckNull

項目が null であることを確認します。

CheckSame

2 つの項目が同じ値であることを確認します。

EqualsErrorMessage

アプリケーションから出力されたエラー メッセージが、指定されたエラー メッセージと一致することを確認します。

Fail

ルーチンが正常に機能しないことを確認します。

FailEquals

エラーが、指定されたエラー条件と同じであることを確認します。

FailNotEquals

エラー条件が、指定されたエラー条件と同じではないことを確認します。

FailNotSame

2 つのエラー条件が同じではないことを確認します。

NotEqualsErrorMessage

2 つのエラー メッセージが同じではないことを確認します。

NotSameErrorMessage

1 つのエラー メッセージが、指定されたエラー メッセージと一致しないことを確認します。

前述の関数を含む DUnit 関数の構文と使い方の詳細は、\source\dunit\doc にある DUnit のヘルプ ファイルを参照してください。

DUnit テスト ランナー

テスト ランナーを使用すると、アプリケーションとは無関係にテストを実行できます。DUnit テスト プロジェクトでは、DUnit フレームワークのテスト ランナー コードは直接コンパイルされ、テスト プロジェクト自体をテスト ランナーにする実行ファイルが生成されます。統合 DUnit フレームワークでは、次の 2 つのテスト ランナーが用意されています。

  • GUI テスト ランナー - GUI ウィンドウに結果を対話的に表示します。結果には成功や失敗を示す色が付いています。
  • Console テスト ランナー - すべてのテスト出力がコンソールに送られます。

テスト対象コードのユニット テストを頻繁に作成する場合は、DUnit GUI テスト ランナーが便利です。DUnit GUI テスト ランナーでは、正常に終了したテストに緑のバー、失敗したテストに赤のバー、省略されたテストに黄色のバーが表示されます。

自動化されたビルド スクリプトから完成したコードやテストを実行する必要がある場合は、DUnit Console テスト ランナーが便利です。

関連項目