MSTest 테스트를 실행하는 동안 Console.Out에 쓰는 방법


114

컨텍스트 :
웹 애플리케이션의 파일 업로드 기능과 관련된 문제를보고하는 일부 사용자가 있습니다. 특별한 패턴없이 가끔 발생합니다. 우리는 오랫동안 그것을 알아 내려고 노력해 왔고, 도움이 될 것이라고 생각되는 곳에 디버그 정보를 추가하고, 로그를 크롤링하는 등의 작업을 수행했지만 재현하거나 파악할 수 없었습니다.

문제 :
이제 MSTest 및 WatiN을 사용하여 여러 번 (수백 개) 실패 할 것으로 예상되는 작업을 반복하여이를 재현하려고합니다. 테스트가 루프에서 얼마나 멀리 왔는지에 대한 단서를 얻으려면 다음과 같이 인쇄하고 싶습니다.

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

그러나 이것은 출력 창에 나타나지 않습니다. 지금은 콘솔의 테스트 결과 출력 (뿐만 아니라 어떤에서 당신이 출력거야 알고 Debug.Writeline등),하지만이 때까지 사용할 수 없습니다 테스트가 완료되었습니다. 수백 번의 반복 테스트를 수행하는 데 시간이 꽤 걸릴 수 있으므로 테스트가 얼마나 진행되었는지 알고 싶습니다.

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


테스트 결과 출력으로 인쇄하는 방법을 찾는 경우 : stackoverflow.com/a/4787047/621690
Risadinha 2019

답변:


111

콘솔 출력이 나타나지 않는 이유는 백엔드 코드가 테스트 컨텍스트에서 실행되고 있지 않기 때문입니다.

Trace.WriteLine(In 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");

73
그래서 기본적으로 Trace.Listeners.Add(new TextWriterTraceListener(Console.Out)); Trace.WriteLine("Hello World");
Marty Neal

7
흠, 난 @Martin 닐에 의해 제안 모두를 보내는 찾는거야 Trace.WriteLine()하고 Console.WriteLine()받는 출력 테스트보기 결과 , 하지 출력보기 . (그리고에 있습니다 테스트보기 결과 , 추가 할 필요가있을 수있다 출력 (stdout) 를 마우스 오른쪽 버튼으로 클릭하고 선택하여 열 추가 / 제거 열을 ... .)하지만, 아마도 난 여전히 출력을 확인할 수 없습니다 출력 보기 수단 나는 ... 뭔가를 누락 것을
DavidRR

3
Trace.Listeners.Add(new ConsoleTraceListener());충분하고 출력 창에 디버그의 출력을 표시합니다.
Dave Anderson

3
실제로 VS2017에서 출력을 찾는 데 어려움을 겪고있었습니다. TestExplorer 창-> 개별 테스트를 클릭-> 테스트에 출력이있는 경우 경과 시간 아래의 세부 정보 창에 "출력"이라는 단어가 있습니다. 새 창.
Mike Walsh

2
Xunit을 사용하는 경우 ctor를 통해 ITestOutputHelper를 가져 와서 WriteLine을 호출하십시오. 통합 테스트 중에 작성하는 방법을 알기까지 시간이 걸렸습니다. 이것이 누군가에게 도움이되기를 바랍니다.
Alexander Høst

69

사용 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);
}

산출

여기에 이미지 설명 입력


8
필요using System.Diagnostics;
kmote

5
DateTime.Now를 사용하지 마십시오. Stopwatch ( msdn.microsoft.com/en-us/library/… ) 를 사용하는 것이 더 좋습니다
suizo

1
나는 이것을 작동시킬 수 없었다. 테스트를 실행하면 출력 창이 즉시 빌드로 전환되고 디버그에는 아무것도 전송되지 않습니다. 당신의 생각?
InteXX

5
@InteXX는 "테스트 실행"이 아닌 "테스트 디버그"를 클릭해야합니다. 그것은 나를 위해 일했습니다
John Henckel

@JohnHenckel : Gotcha. 감사. 그렇게 할 것입니다. 사실 Schaliasos는 그의 대답에서 정확히 그렇게 말합니다. 내가 그것을 어떻게 놓쳤는 지 확실하지 않습니다.
InteXX

13

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

3

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


System.Diagnostics.Debug.WriteLine테스트를 디버깅 하는 동안 사용하여 보여줄 것을 얻을 수 있지만 어떻게 Console.WriteLine작동합니까? 이것은 나를 위해 정상적인 (라이브 업데이트) 출력으로 끝나지 않습니다.
OR Mapper

테스트를 실행하는 동안 출력을 보는 방법을 찾았습니까?
hima

0

단일 테스트를 설정하고이 테스트에서 성능 테스트를 만드는 것이 좋습니다. 이렇게하면 기본 도구 세트를 사용하여 진행 상황을 모니터링 할 수 있습니다.


"이렇게하면 기본 도구 세트를 사용하여 진행 상황을 모니터링 할 수 있습니다." - 어떻게? 내가보고있는 문제는 정확히 테스트가 실행되면 블랙 박스이고 테스트 실행이 완료된 후 출력 창 에서 출력 ( 테스트가 실행되는 동안 점차적으로 작성 중임) 만 볼 수 있다는 것입니다. .
OR Mapper

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.