DUnitで例外の発生をテストする

DUnitで例外の発生をテストする方法

結論

テストするメソッドに引数がない場合はCheckExceptionを使用する。

テストするメソッドに引数がある場合はStartExpectingException~StopExpectingExceptionを使用する。

クラスTFooは例外を発生する2つのメソッドBarとBazを持つ。
Barメソッドは引数をとらず、Bazメソッドは引数をとる

TFoo = class
public
  procedure Bar;
  procedure Baz(I: Integer);
end;

procedure TFoo.Bar;
begin
  raise EProgrammerNotFound.Create('エラー');
end;

procedure TFoo.Baz(I: Integer);
begin
  if I = 0 then raise EArgumentException.Create('エラー');
end;

引数をとらないBarメソッドが例外を発生させることをテストするには、CheckExceptionを使用する。
CheckExceptionは第1引数にメソッドポインタ、第2引数に発生する例外の型を取る。

procedure TestTFoo.TestBar;
var
  Foo: TFoo;
begin
  Foo := TFoo.Create;
  CheckException(Foo.Bar, EProgrammerNotFound);
end;

引数をとるBazメソッドが例外を発生させることをテストするには、StartExpectingException~StopExpectingExceptionを使用する。
StartExpectingExceptionは引数に発生する例外の型を取る。
StartExpectingExceptionとStopExpectingExceptionの間で、テストするメソッドを呼ぶ。

procedure TestTFoo.TestBaz;
var
  Foo: TFoo;
begin
  Foo := TFoo.Create;

  StartExpectingException(EArgumentException);
  Foo.Baz(0);
  StopExpectingException();
end;

コメントを残す

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

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