4

手順を使用TAbstractTest.Statusして、テスト中にDUnitGUIにいくつかのデバッグメッセージを表示できます。

しかし、テストのグループを実行すると、最後に実行されたテストのステータスメッセージしか表示されません。実行する各テストを選択せず​​に、どういうわけか完全なログを表示できますか?

4

3 に答える 3

3

障害が発生したときに値を出力するStatus()メソッドを使用しました。

procedure Test.TestGetStringListQueryValuesException;
var
  ReturnValue: TList<String>;
  item: String;
begin
  ReturnValue := FTest.GetStringListQueryValues;
  try
    for item in ReturnValue do
    begin
      Status('Value Processed: ' + item);
      CheckTrue(Pos('B', item) > 0, 'Wrong Value, Expected Item containing ''B'' but found: ' + item);
    end;
  finally
    ReturnValue.Free;
  end;
end;

その結果は次のようなものになります。

TestGetIntegerListQueryValuesException: ETestFailure
at  $0050B842
Wrong Value, Expected > 50 and < 60 but found: 61, expected: <True> but was: <False>

Status Messages
Value Processed: 52
Value Processed: 54
Value Processed: 55
Value Processed: 58
Value Processed: 59
Value Processed: 61

テスト中に何がうまくいかなかったかを特定することは非常に役立ちます。SetStatusListener()は試していませんが、テストが成功したときにログを表示したい場合は、これが正しい方法だと思います。

カスタマイズされたメッセージを出力セクションに記録できるNunitと同じ動作を模倣したいと思います。

より良いアイデアはありますか?

于 2012-05-27T09:09:40.260 に答える
2

DUnitソースコードはIStatusListenerインターフェースとパブリックメソッドを使用します

procedure TAbstractTest.SetStatusListener(Listener: IStatusListener);

これは、テストクラスで新しい実装を使用するためにオーバーライドできます。私はそれを試していませんが、それは最もクリーンな解決策である可能性があります。

于 2012-03-06T13:52:11.570 に答える
0

最初に新しいプロシージャを作成します

   procedure Log(text: string);
   begin
      LogStringList.Add(text);
      Status(text);
   end;

status()すべてをに置き換えますLog()。そして、すべてのテストの最後に新しいテストを作成します

   procedure TestXXX.ShowLog;
   begin
      Status(LogStringList.Text);
      LogStringList.Clear;
   end;

LogStringList: TStringListテストユニットの初期化ブロックで作成する必要があります。

于 2013-01-09T11:09:51.787 に答える