DUnitX の概要

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

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

DUnitX は、NUnit テスト フレームワークに基づくオープンソースのユニット テスト フレームワークで、xUnit のアイデアも一部取り入れられています。RAD Studio に DUnitX フレームワークが統合されていることにより、Win32、Win64、Mac OS X をターゲットとする Delphi アプリケーションおよび C++Builder アプリケーションのテストを作成して実行することができます。

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

DUnitX では、ジェネリックスと無名メソッドを利用しています。DUnitX では、Delphi パーソナリティの場合、属性を使用します。 C++Builder の場合は、__published 可視性のメソッドを使用します。

DUnitX のホーム ページ(https://github.com/VSoftTechnologies/DUnitX/wiki)も参照してください。

Delphi 版 DUnitX テストの作成

次のサンプル Delphi プログラムでは、単純な加算および減算を実行する 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.

次の例はテスト ユニットを示します。上記の 2 つの関数をテストするには、これを変更する必要があります。SetUp メソッドと TearDown メソッド、さらに、テスト メソッド TestAdd および TestSub にコードを追加する必要があります。最後に、属性を利用して関数をテストします。

unit TestCalcUnit;

interface
uses
  DUnitX.TestFramework, CalcUnit;

type

  [TestFixture]
  TestTCalc = class(TObject)
  strict private
    aTCalc: TCalc;
  public
    [Setup]
    procedure Setup;
    [TearDown]
    procedure TearDown;
    // Sample Methods
    // Test with TestCase Atribute to supply parameters.
    [TestCase('TestA','8,2,10')]
    procedure TestAdd(Value1, Value2, _Result: Integer);
    // Test with TestCase Atribute to supply parameters.
    [TestCase('TestB','3,4,-1')]
    procedure TestSub(Value1, Value2, _Result: Integer);
  end;

implementation

procedure TestTCalc.Setup;
begin
  aTCalc := TCalc.Create;
end;

procedure TestTCalc.TearDown;
begin
  aTCalc := nil;
end;

procedure TestTCalc.TestAdd(Value1, Value2, _Result: Integer);
var
  R: Integer;
begin
  R := aTCalc.Add(Value1, Value2);
  Assert.AreEqual(R, _Result);   // testcode
end;

procedure TestTCalc.TestSub(Value1, Value2, _Result: Integer);
var
  R: Integer;
begin
  R := aTCalc.Sub(Value1, Value2);
  Assert.AreEqual(R, _Result);  // testcode
 end;

initialization
  TDUnitX.RegisterTestFixture(TestTCalc);
end.

C++ 版 DUnitX テストの作成

次のサンプル C++Builder プログラムでは、単純な加算および減算を実行する 2 つの関数を定義しています。

class TCalc
{
	 public:
	 int Add(int x,int y);
	 int Sub(int x,int y);
};

int TCalc::Add(int x, int y)
{
	 int Result = x + y;
	 return Result;
}

int TCalc::Sub(int x, int y)
{
	 int Result = x-y;
	 return Result;
}

次の例はテスト ユニットを示します。上記の 2 つの関数をテストするには、これを変更する必要があります。SetUp メソッドと TearDown メソッド、さらに、テスト メソッド TestAdd および TestSub にコードを追加する必要があります。

#include <DUnitX.TestFramework.hpp>
#include <stdio.h>

#pragma option --xrtti

class __declspec(delphirtti) TestCalc : public TObject
{
public:
  virtual void __fastcall SetUp();
  virtual void __fastcall TearDown();

__published:
  void __fastcall TestAdd();
  void __fastcall TestSub();
};

TCalc *aTCalc;

void __fastcall TestCalc::SetUp()
{
	aTCalc = new TCalc();
}

void __fastcall TestCalc::TearDown()
{
	delete aTCalc;
}

void __fastcall TestCalc::TestAdd()
{
  int R;
  R = aTCalc->Add(2, 8);
  Assert::AreEqual(R, 10);
}

void __fastcall TestCalc::TestSub()
{
  int R;
  R = aTCalc->Add(3, 4);
  Assert::AreEqual(R, -1);
}

static void registerTests()
{
  TDUnitX::RegisterTestFixture(__classid(TestCalc));
}
#pragma startup registerTests 33

DUnitX の関数

DUnitX には、テストで使用できる多数の関数を備えた Assert クラスが用意されています。

これらの関数の一部を次の表に示します。

関数 説明

Pass

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

Fail

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

AreEqual

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

AreNotEqual

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

AreSame

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

AreNotSame

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

Contains

項目がリストに含まれていることを確認します。

DoesNotContain

項目がリストに含まれていないことを確認します。

IsTrue

条件が成立することを確認します。

IsFalse

条件が成立しないことを確認します。

IsEmpty

項目の値が空であることを確認します。

IsNotEmpty

項目の値が空でないことを確認します。

IsNull

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

IsNotNull

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

WillRaise

メソッドで例外が発生するかどうかを確認します。

StartsWith

文字列が指定の部分文字列で始まるかどうかを確認します。

InheritsFrom

クラスが指定のクラスの下位クラスかどうかを確認します。

IsMatch

項目が指定のパターンと一致するかどうかを確認します。

上記の関数をはじめとする DUnitX の関数の構文と使用法の詳細については、\source\DUnitX にある DUnitX のヘルプ ファイルを参照してください。

DUnitX テスト ランナー

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

  • コンソール型テスト ランナー:
    • すべてのテスト出力をコンソールに送ります。これは、DUnitX プロジェクト実行時のデフォルトのテスト モードです。DUnitX フレームワークには、テスト出力をコンソールに送る TDUnitXConsoleLogger クラスが用意されています。
    • 完成したコードとテストを、自動化されたビルド スクリプトから実行する場合に役に立ちます。
  • GUI 型テスト ランナー:
    • テスト結果を GUI ウィンドウ(FireMonkey 用に 1 つと VCL 用に 1 つ)に対話的に表示します。DUnitX フレームワークには、FireMonkey GUI 用の出力を生成する TGUIXTestRunner クラスと VCL GUI 用の TDUnitXGuiLoggerForm クラスが用意されています。
    • テスト対象となっているコードのユニット テストを積極的に作成する場合に非常に役に立ちます。

関連項目