Delphiのユニットテストのチュートリアル

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」ボタンを押します。

テストが失敗しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください