Как писать в консоль.Выход во время выполнения теста MSTest
контекст:
У нас есть некоторые пользователи сообщают проблемы с функцией загрузки файлов в веб-приложение. Это случается лишь изредка и без какой-либо особой закономерности. Мы пытались выяснить это в течение длительного времени, добавляя отладочную информацию в любом месте, где мы можем подумать, что это может помочь, обход журналов и т. д., Но мы не смогли воспроизвести или выяснить это.
:
Я сейчас пытаюсь воспроизведите это, используя MSTest и WatiN для повторения операции, которая должна завершиться ошибкой большое количество раз (несколько сотен). Просто чтобы понять, насколько далеко в цикле прошел тест, я хочу напечатать что-то вроде:
Console.WriteLine(String.Format("Uploaded file, attempt {0} of {1}", i, maxUploads));
однако это не отображается в окне вывода. Теперь я знаю, что вы получите вывод консоли в результатах теста (а также то, что вы выводите из Debug.Writeline
etc), но это не доступно до после испытание законченный. И поскольку мой тест с сотнями повторений может занять довольно много времени, я хотел бы знать, как далеко он зашел.
вопрос:
Есть ли способ получить вывод консоли в окне вывода во время выполнение теста?
5 ответов
вывод консоли не отображается, потому что бэкэнд-код не выполняется в контексте теста.
вам, вероятно, лучше использовать Trace.WriteLine
(В Системе.Диагностика), а затем добавление прослушивателя трассировки, который записывает в файл.
эта тема из MSDN показывает способ сделать это.
Я нашел собственное решение. Я знаю, что ответ Andras, вероятно, наиболее соответствует MSTEST, но мне не хотелось рефакторинговать свой код.
[TestMethod]
public void OneIsOne()
{
using (ConsoleRedirector cr = new ConsoleRedirector())
{
Assert.IsFalse(cr.ToString().Contains("New text"));
/* call some method that writes "New text" to stdout */
Assert.IsTrue(cr.ToString().Contains("New text"));
}
}
одноразовые ConsoleRedirector
определено как:
internal class ConsoleRedirector : IDisposable
{
private StringWriter _consoleOutput = new StringWriter();
private TextWriter _originalConsoleOutput;
public ConsoleRedirector()
{
this._originalConsoleOutput = Console.Out;
Console.SetOut(_consoleOutput);
}
public void Dispose()
{
Console.SetOut(_originalConsoleOutput);
Console.Write(this.ToString());
this._consoleOutput.Dispose();
}
public override string ToString()
{
return this._consoleOutput.ToString();
}
}
У меня была та же проблема и я был "ходовые" испытания. Если я вместо этого" отлаживаю " тесты, вывод отладки показывает просто отлично, как и все другие трассировки и консоли. Я не знаю, как увидеть результат, если вы" запустите " тесты.
вам лучше настроить один тест и создать тест производительности из этого теста. Таким образом, вы можете отслеживать прогресс, используя набор инструментов по умолчанию.