我正在编写一个从 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 存储库,或者这是否可能。
也许我对细节很着迷,这不是可单元测试的。提升一层抽象,很容易看出我如何模拟整个 GitLog 类并返回一些预设结果。那么我是不是想在这里深入研究太多细节?你会如何处理这个问题?