手順を使用TAbstractTest.Status
して、テスト中にDUnitGUIにいくつかのデバッグメッセージを表示できます。
しかし、テストのグループを実行すると、最後に実行されたテストのステータスメッセージしか表示されません。実行する各テストを選択せずに、どういうわけか完全なログを表示できますか?
手順を使用TAbstractTest.Status
して、テスト中にDUnitGUIにいくつかのデバッグメッセージを表示できます。
しかし、テストのグループを実行すると、最後に実行されたテストのステータスメッセージしか表示されません。実行する各テストを選択せずに、どういうわけか完全なログを表示できますか?
障害が発生したときに値を出力する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と同じ動作を模倣したいと思います。
より良いアイデアはありますか?
DUnitソースコードはIStatusListenerインターフェースとパブリックメソッドを使用します
procedure TAbstractTest.SetStatusListener(Listener: IStatusListener);
これは、テストクラスで新しい実装を使用するためにオーバーライドできます。私はそれを試していませんが、それは最もクリーンな解決策である可能性があります。
最初に新しいプロシージャを作成します
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
テストユニットの初期化ブロックで作成する必要があります。