How to write to Console.Out during execution of an MSTest test

后端 未结 5 1572
谎友^
谎友^ 2020-11-28 03:25

Context:
We have some users reporting issues with a file upload feature in our web application. It only happens occasionally and without any sp

相关标签:
5条回答
  • 2020-11-28 04:00

    I had the same issue and I was "Running" the tests. If I instead "Debug" the tests the Debug output shows just fine like all others Trace and Console. I don't know though how to see the output if you "Run" the tests.

    0 讨论(0)
  • 2020-11-28 04:05

    I found a solution of my own. I know that Andras answer is probably the most consistent with MSTEST, but I didn't feel like refactoring my code.

    [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"));
        }
    }
    

    The disposable ConsoleRedirector is defined as:

    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();
        }
    }
    
    0 讨论(0)
  • 2020-11-28 04:12

    You better setup a single test and create a performance test from this test. This way you can monitor the progress using the default tool set.

    0 讨论(0)
  • 2020-11-28 04:13

    The Console output is not appearing is because the backend code is not running in the context of the test.

    You're probably better off using Trace.WriteLine (In System.Diagnostics) and then adding a trace listener which writes to a file.

    This topic from MSDN shows a way of doing this.


    According to Marty Neal's and Dave Anderson's comments:

    using System;
    using System.Diagnostics;
    
    ...
    
    Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
    // or Trace.Listeners.Add(new ConsoleTraceListener());
    Trace.WriteLine("Hello World");
    
    0 讨论(0)
  • 2020-11-28 04:21

    Use the Debug.WriteLine. This will display your message in the Output window immediately. The only restriction is that you must run your test in Debug mode.

    [TestMethod]
    public void TestMethod1()
    {
        Debug.WriteLine("Time {0}", DateTime.Now);
        System.Threading.Thread.Sleep(30000);
        Debug.WriteLine("Time {0}", DateTime.Now);
    }
    

    Output

    enter image description here

    0 讨论(0)
提交回复
热议问题