テストコードを書くとき、実行結果を確認するためのログ出力は重要なポイントです。特に、ユニットテストやデバッグの際に、どの処理が実行されたのかを簡単に追跡できると便利ですよね。
そこで役立つのが「Log String(記録用文字列)パターン」です。本記事では、このパターンの概要とC#での実装方法を、初心者向けに分かりやすく解説します。
目次
Log String(記録用文字列)パターンとは?
Log Stringパターンは、テストの実行中に処理の流れを記録するために、文字列(String)にログを蓄積していくシンプルな方法です。
このパターンを使うことで、デバッグの手間を減らし、期待した処理が実行されているかを簡単に確認できます。
例えば、以下のようなシナリオで役立ちます:
- メソッドの呼び出し順序を確認したい
- 複雑な処理の流れをログに記録して可視化したい
- ユニットテストで期待通りの挙動をしているか確認したい
Log Stringパターンを使うメリット
Log Stringパターンには、以下のようなメリットがあります。
✅ テストのデバッグが簡単になる
→ どの処理が実行されたか一目で分かる
✅ ユニットテストの可読性が向上する
→ 期待値との比較が容易
✅ ログ出力よりもシンプルで扱いやすい
→ 外部ライブラリ不要で導入しやすい
C#での具体的な実装方法
では、実際にC#でLog Stringパターンを使う方法を見ていきましょう。
using System;
using System.Text;
class Program
{
static void Main()
{
StringBuilder log = new StringBuilder();
ProcessA(log);
ProcessB(log);
ProcessC(log);
Console.WriteLine("ログの内容:");
Console.WriteLine(log.ToString());
}
static void ProcessA(StringBuilder log)
{
log.AppendLine("ProcessA 実行");
}
static void ProcessB(StringBuilder log)
{
log.AppendLine("ProcessB 実行");
}
static void ProcessC(StringBuilder log)
{
log.AppendLine("ProcessC 実行");
}
}
ログの内容:
ProcessA 実行
ProcessB 実行
ProcessC 実行
このように、メソッドごとにログを記録することで、処理の順番や実行状況を把握しやすくなります。
Log Stringパターンを活用したユニットテスト
Log Stringパターンは、ユニットテストの中でも特に有用です。
例えば、メソッドの実行順序が期待通りかをテストする場合に使えます。
using System.Text;
using Xunit;
public class LogStringTests
{
[Fact]
public void LogString_正しい順序で記録される()
{
StringBuilder log = new StringBuilder();
ProcessA(log);
ProcessB(log);
ProcessC(log);
string expected = "ProcessA 実行\nProcessB 実行\nProcessC 実行\n";
Assert.Equal(expected, log.ToString());
}
private void ProcessA(StringBuilder log)
{
log.AppendLine("ProcessA 実行");
}
private void ProcessB(StringBuilder log)
{
log.AppendLine("ProcessB 実行");
}
private void ProcessC(StringBuilder log)
{
log.AppendLine("ProcessC 実行");
}
}
このように、ログの期待値と比較することで、処理の順序を保証するテストが簡単に作れます!
まとめ
最後に、Log String(記録用文字列)パターンのポイントをおさらいしましょう。
- 文字列(String)を使って処理の流れを記録するシンプルな方法
- メソッドの実行順序や処理の可視化に最適
- デバッグやユニットテストの可読性が向上
- 外部ライブラリ不要で導入が簡単
- C#では
StringBuilder
を使うと効率的