IT

MSTest 테스트 실행 중 Console.Out에 쓰는 방법

lottoking 2020. 8. 2. 17:15
반응형

MSTest 테스트 실행 중 Console.Out에 쓰는 방법


일부
사용자는 웹 애플리케이션의 파일 업로드 기능에 대한 문제를보고합니다. 특별한 패턴없이 발생합니다. 도움이 될 수 있다고 생각되는 곳에 디버그 정보를 추가하고 로그를 크롤링하는 등 오랫동안 알아 내려고 노력했지만 그 정보를 재현하거나 할 수 없습니다.

문제 :
이제 MSTest와 WatiN을 사용하여 여러 번 실패해야하는 작업 (수백)을 반복하여 재현합니다. 루프에서 테스트가 얼마나 멀리 도달했는지에 대한 단서가 있으려면 다음과 같이 인쇄하고 싶습니다.

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

그러나 이것은 출력됩니다. 지금은 콘솔의 테스트 결과 출력 (아니라 어떤에서뿐만 당신이 출력거야 알고 Debug.Writeline등),이 때까지하지만 사용할 수 없습니다 테스트가 완료되었습니다. 그리고 수많은 번의 반복 테스트를 수행하는 데 상당한 시간이 걸릴 수 있습니다.

질문 : 테스트 실행 중에
출력되는 창에서 콘솔 출력을 얻을 수있는 방법이있습니까?


콘솔 출력이 거부되지 않는 테스트 환경에서 백엔드 코드가 실행되고 있지 않습니다.

Trace.WriteLine(에서 System.Diagnostics 네임) 사용하고 파일를에 쓰는 추적 수신기를 추가하는 것이 좋습니다 .

MSDN 의이 주제는이 를 수행하는 방법을 보여줍니다.


Marty Neal과 Dave Anderson의 의견에 따르면 :

using System;
using System.Diagnostics;

...

Trace.Listeners.Add(new TextWriterTraceListener(Console.Out));
// or Trace.Listeners.Add(new ConsoleTraceListener());
Trace.WriteLine("Hello World");

를 사용하십시오 Debug.WriteLine. 메시지가 Output창에 즉시 표시됩니다. 유일한 제한은 테스트를 Debug모드 에서 실행해야하는 것 입니다.

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

많이

여기에 이미지 설명을 입력하십시오


내 자신의 해결책을 찾았습니다. 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();
    }
}

나는 같은 문제가 있지만 테스트를 "실행 중"이었습니다. 대신 "디버그"테스트를 수행하면 디버그이 다른 모든 트레이스 및 콘솔과 마침 표시됩니다. 테스트를 "실행"하면 출력을 보는 방법을 모르겠습니다.


이 테스트에서 단일 테스트를 더 잘 설정하고 성능 테스트를 작성하십시오. 이 방법으로 기본 도구 세트를 사용하여 진행 상황을 모니터링 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/4884043/how-to-write-to-console-out-during-execution-of-an-mstest-test

반응형