Я работаю над стратегией автоматизации для нашей группы контроля качества, и мне нужно иметь возможность фиксировать вывод сценариев и EXE-файлов. Когда я запускаю этот код как консольное приложение, я могу успешно записать вывод plink.exe:
class Program
{
static void Main(string[] args)
{
Process process = new Process();
process.StartInfo.FileName = @"C:\Tools\plink.exe";
process.StartInfo.Arguments = @"10.10.9.27 -l root -pw PASSWORD -m C:\test.sh";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
output = output.Trim().ToLower(); // Output is successfully captured here
if (output == "pass")
{
Console.WriteLine("Passed!");
}
}
}
Выполнение этой команды занимает около минуты, и я успешно записываю результаты в выходную переменную.
Однако, когда я компилирую тот же код, что и DLL, и запускаю через NUnit, код завершается немедленно и завершается неудачно со значением output == NULL:
[TestFixture]
public class InstallTest
{
[Test]
public void InstallAgentNix()
{
Process process = new Process();
process.StartInfo.FileName = @"C:\Tools\plink.exe";
process.StartInfo.Arguments = @"10.10.9.27 -l root -pw PASSWORD -m C:\test.sh";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
output = output.Trim().ToLower();
Assert.AreEqual("pass", output, "Agent did not get installed");
}
}
Я сузил проблему до линии string output = process.StandardOutput.ReadToEnd()
. Если я прокомментирую строку, время выполнения составляет около минуты, и операция успешно выполняется на удаленном компьютере (test.sh выполняется на удаленном компьютере linux).
Надеюсь, мне не хватает чего-то простого - я не хочу искать другой тестовый комплект.
РЕДАКТИРОВАТЬ: Похоже на (нерешенный) вопрос здесь: Почему процесс, запущенный в dll, работает при тестировании с помощью консольного приложения, но не при вызове другой dll?