YouTubeで公開されているDelphiのユニットテストのチュートリアル動画「Delphi Unit Testing]をやってみました。
DelphiのVCLフォームアプリケーションを新規に作成します。
フォームにボタン(TButton)とラベル(TLabel)を配置します。
ラベル(Label1)のCaptionを「Answer is:」に変更します。
TForm1にメソッドを追加します。
type
TForm1 = class(TForm)
public
{ Public 宣言 }
function CalsMy2Numbers(a, b: Integer): Integer;
end;
function TForm1.CalsMy2Numbers(a, b: Integer): Integer;
var
Myavar: Integer;
begin
Myavar := a + b;
Result := Myavar;
end;
ボタン(Button1)のクリックイベントを追加します。
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(CalsMy2Numbers(12, 12));
end;
プログラムを実行します。
ボタン(Button1)を押すと、ラベル(Label1)に計算結果が表示されます。
プロジェクトに「ユニットテスト」の「テストプロジェクト」を追加します。
「次へ」ボタンを押します。
「完了」ボタンを押します。
プロジェクトに「Test\Project1Tests」が追加されました。
テストケースを追加します。
「指定可能なクラスとメソッド」の「Button1Click」のチェックを外します。
「次へ」ボタンを押します。
「完了」ボタンを押します。
「TestUnit1.pas」が作成されます。
テストコードが自動的に記述されています。
TestTForm1.SetUpを修正します。
procedure TestTForm1.SetUp;
begin
FForm1 := TForm1.Create(nil); //<= (nil)を追加
end;
TestTForm1.TestCalsMy2Numbersを修正します。
procedure TestTForm1.TestCalsMy2Numbers;
var
ReturnValue: Integer;
b: Integer;
a: Integer;
begin
a := 12; //<=追加
b := 12; //<=追加
// TODO: メソッド呼び出しパラメータのセットアップ
ReturnValue := FForm1.CalsMy2Numbers(a, b);
// TODO: メソッド結果の検証
CheckNotEquals(24, ReturnValue, 'Bad! Value should not equal'); //<=追加
end;
プログラムを実行します。
「Run」ボタンを押します。
テストが失敗します。
Bad! Value should not equal, expected and actual were: <24>
TestTForm1.TestCalsMy2Numbersを編集します。
procedure TestTForm1.TestCalsMy2Numbers;
var
ReturnValue: Integer;
b: Integer;
a: Integer;
begin
a := 12;
b := 12;
// TODO: メソッド呼び出しパラメータのセットアップ
ReturnValue := FForm1.CalsMy2Numbers(a, b);
// TODO: メソッド結果の検証
CheckNotEquals(25, ReturnValue, 'Bad! Value should not equal'); //<=24を25に修正
Status('Success!'); //<=追加
end;
プログラムを実行し、「Run」ボタンを押します。
テストが成功しました。
TestCalsMy2Numbers:
Success!
TestTForm1.TestCalsMy2Numbersを編集します。
procedure TestTForm1.TestCalsMy2Numbers;
var
ReturnValue: Integer;
b: Integer;
a: Integer;
begin
a := 12;
b := 12;
// TODO: メソッド呼び出しパラメータのセットアップ
ReturnValue := FForm1.CalsMy2Numbers(a, b);
// TODO: メソッド結果の検証
// CheckNotEquals(25, ReturnValue, 'Bad! Value should not equal'); //<=コメント
CheckEquals(24, ReturnValue, 'Values match '+IntToStr(ReturnValue)); //<=追加
Status('Success!');
end;
プログラムを実行し、「Run」ボタンを押します。
テストが成功しました。
TestTForm1.TestCalsMy2Numbersを編集します。
procedure TestTForm1.TestCalsMy2Numbers;
var
ReturnValue: Integer;
b: Integer;
a: Integer;
begin
a := 12;
b := 12;
// TODO: メソッド呼び出しパラメータのセットアップ
ReturnValue := FForm1.CalsMy2Numbers(a, b);
// TODO: メソッド結果の検証
// CheckNotEquals(25, ReturnValue, 'Bad! Value should not equal');
CheckEquals(25, ReturnValue, 'Values dont match '+IntToStr(ReturnValue)); //<=24を25に変更
Status('Success!');
end;
プログラムを実行し、「Run」ボタンを押します。
テストが失敗しました。
Values dont match 24, expected: <25> but was: <24>
TestTForm1.TestCalsMy2Numbersを編集します。
procedure TestTForm1.TestCalsMy2Numbers;
var
ReturnValue: Integer;
b: Integer;
a: Integer;
begin
a := 12;
b := 12;
// TODO: メソッド呼び出しパラメータのセットアップ
ReturnValue := FForm1.CalsMy2Numbers(a, b);
// TODO: メソッド結果の検証
// CheckNotEquals(25, ReturnValue, 'Bad! Value should not equal');
// CheckEquals(25, ReturnValue, 'Values dont match '+IntToStr(ReturnValue)); //<=コメント
Assert(false, 'too bad!'); //<=追加
// Status('Success!'); //<=コメント
end;
プログラムを実行し、「Run」ボタンを押します。
テストが失敗しました。