Git リポジトリから情報を抽出するプログラムを作成しています。GitLog
コミットログを抽出するというクラスに取り組んでいます。基本的に、プロセスを起動して ' git log
' コマンドを実行し、stdout に戻ってきたものをストリーム リーダーに取り込みます。メソッドの要点は次のとおりです (ここでGitWorkingCopyPath
は、有効であり、Git 作業コピーを指していると想定できます。このコードの残りの部分は完全にテストされておらず、これが実際の質問のポイントです):
public StreamReader GetLogStream()
{
var psi = new ProcessStartInfo("git.exe", "log");
psi.CreateNoWindow = true;
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.WorkingDirectory = GitWorkingCopyPath;
var process = Process.Start(psi);
return process.StandardOutput;
}
明らかに、これはディスク上のどこかに作業コピーを持つことと非常に結びついています。Git リポジトリを配置することなく、このメソッドを単体テストする方法、またはそれが可能かどうかを考えようとしています。
おそらく私は詳細にこだわっていて、これは単体テストできません。抽象化の 1 レベル上に移動すると、GitLog クラス全体をモックアウトして、定型の結果を返す方法を簡単に確認できます。では、ここで詳しく掘り下げすぎているのでしょうか。これにどのようにアプローチしますか?