Как писать в консоль.Выход во время выполнения теста MSTest


контекст:
У нас есть некоторые пользователи сообщают проблемы с функцией загрузки файлов в веб-приложение. Это происходит только изредка и без какой-либо особой картины. Мы пытались выяснить это в течение длительного времени, добавляя отладочную информацию в любом месте, где мы можем подумать, что это может помочь, просматривая журналы и т. д., Но мы не смогли воспроизвести или понять это.

:
Я сейчас пытаюсь воспроизведите это с помощью MSTest и WatiN, чтобы повторить операцию, которая должна завершиться с ошибкой большое количество раз (несколько сотен). Просто понятия о том, как далеко в цикле тест получил, я хочу напечатать что-то вроде:

Console.WriteLine(String.Format("Uploaded file, attempt {0} of {1}", i, maxUploads));

однако это не отображается в окне вывода. Теперь я знаю, что вы получите вывод консоли в результатах теста (а также то, что вы выводите из Debug.Writeline etc), но это не доступно до после испытание законченный. И поскольку мой тест с сотнями повторений может занять довольно много времени, я хотел бы знать, как далеко он продвинулся.

вопрос:
Есть ли способ, которым я могу получить вывод консоли в окне вывода во время выполнение теста?

5 97

5 ответов:

вывод консоли не отображается, потому что внутренний код не выполняется в контексте теста.

вы, вероятно, лучше использовать Trace.WriteLine (В Системе.Диагностика), а затем добавление прослушивателя трассировки, который записывает в файл.

эта тема из MSDN показывает способ сделать это.

использовать Debug.WriteLine. Это отобразит ваше сообщение в

Я нашел свое собственное решение. Я знаю, что ответ 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();
    }
}

У меня была та же проблема и я был "ходовые" испытания. Если я вместо этого" отлаживаю " тесты, вывод отладки показывает просто отлично, как и все остальные трассировки и консоли. Я не знаю, хотя, как увидеть результат, если вы "запустите" тесты.

вам лучше настроить один тест и создать тест производительности из этого теста. Таким образом, вы можете отслеживать прогресс с помощью набора инструментов по умолчанию.