Я пишу программу, которая извлекает информацию из репозиториев 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 и просто возвращать некоторые законченные результаты. Так я пытаюсь подробно рассказать об этом здесь? Как бы вы к этому подошли?
Возможно, вы захотите посмотреть на libgit2 - http://libgit2.github.com/ – Lee
@lee Это отличное предложение (+1), однако для одной команды мне нужно (git log), я думаю, что это проще просто для использования git.exe. Возможно, это не самое чистое решение, но libgit2 представляет некоторые аспекты лицензирования, с которыми я не хочу иметь дело, и похоже, что это будет больше работать только для одной команды, в которой я нуждаюсь. –