DUnit の概要
アプリケーションのテスト:インデックス への移動
- 警告: DUnit は非推奨になりました。そのため、今後は機能強化されません。DUnit を使用した新規開発はしないことをお勧めします。既存テストを DUnit から DUnitX に移行することを検討してください。「DUnitX の概要」を参照してください。
- 警告: 出力結果を見るための FireMonkey GUI を DUnit ではサポートしていません。DUnit ではなく DUnitX を使用してください。
DUnit は、JUnit テスト フレームワークに基づくオープンソースのユニット テスト フレームワークです。DUnit フレームワークを使用して、Delphi Win32 アプリケーションに対するテストを作成および実行できます。RAD Studio に DUnit フレームワークが統合されていることにより、Delphi Win32 アプリケーションおよび C++Builder アプリケーションのテストを作成して実行することができます。
DUnit テスト フレームワークには、さまざまな条件をテストできるメソッドが一式用意されています。メソッドは、よく使用されるアサーションを表します。また、カスタム アサーションを作成することもできます。用意されているメソッドを使用して、多数の条件をテストできます。
DUnit ホーム ページ http://dunit.sourceforge.net/ も参照してください。
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.
次に、テスト ケース スケルトン ファイルの例を示します。前のコードに含まれている Add と Sub の 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 が含まれます。ウィザードでこのサンプルが生成されますが、ユーザーが Add と Sub 関数を実行するテストを記述することが想定されています。この例ではユニット テスト用の 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 テスト ランナーが便利です。