[C#] 단위 테스트에서 콘솔에 쓸 수 있습니까? 그렇다면 왜 콘솔 창이 열리지 않습니까?

Visual Studio에 테스트 프로젝트가 있습니다. Microsoft.VisualStudio.TestTools.UnitTesting을 사용합니다.

이 줄을 단위 테스트 중 하나에 추가합니다.

Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();

테스트를 실행할 때 테스트는 통과하지만 콘솔 창이 전혀 열리지 않습니다.

단위 테스트를 통해 콘솔 창을 상호 작용할 수있는 방법이 있습니까?



답변

참고 : 아래의 원래 답변은 VS2012까지의 모든 VS 버전에서 작동합니다. VS2013에는 더 이상 테스트 결과 창이 없습니다. 대신 테스트 별 출력이 필요한 경우 @Stretch의 제안을 사용 Trace.Write()하여 출력을 출력 창에 쓸 수 있습니다.


Console.Write메서드는 “콘솔”에 쓰지 않습니다. 실행중인 프로세스의 표준 출력 핸들에 연결된 모든 것에 씁니다. 마찬가지로 Console.Read표준 입력에 연결된 모든 것에서 입력을 읽습니다.

VS2010을 통해 단위 테스트를 실행하면 표준 출력이 테스트 하네스에 의해 리디렉션되고 테스트 출력의 일부로 저장됩니다. Test Results 창을 마우스 오른쪽 버튼으로 클릭하고 “Output (StdOut)”열을 디스플레이에 추가하면이 정보를 볼 수 있습니다. 이것은 stdout에 쓰여진 모든 것을 보여줄 것입니다.

당신은 할 수 수동 @ sinni800 말한대로 P / 호출을 사용하여 콘솔 창을 엽니 다. AllocConsole설명서를 읽으면 기능이 재설정 stdin되고 stdout새 콘솔 창을 가리 키도록 처리됩니다. (나는 그것에 대해 100 % 확신하지 못합니다. stdoutWindows에서 Windows를 도용하기 위해 이미 리디렉션 했지만 시도하지 않은 경우 다소 잘못된 것 같습니다 .)

그러나 일반적으로 나쁜 생각이라고 생각합니다. 콘솔을 사용하기 위해 유닛 테스트에 대한 추가 정보를 덤프하는 것만으로도 출력이 제공됩니다. 그대로 사용 Console.WriteLine하고 테스트 결과 창에서 출력 결과를 확인하십시오.


답변

누군가 VS2013의이 새로운 기능에 대해 언급했습니다. 나는 그가 처음에 무엇을 의미하는지 확신하지 못했지만 이제는 내가 할 수 있다고 생각합니다.

Console.WriteLine을 정상적으로 사용할 수 있으며 출력은 테스트 창에서가 아니라 테스트 세부 사항에서 “출력”을 클릭하면 새 창이 나타납니다.

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


답변

이 줄을 사용 하여 Visual Studio의 출력 창 에 쓸 수 있습니다 .

System.Diagnostics.Debug.WriteLine("Matrix has you...");

디버그 모드에서 실행해야합니다.


답변

언급 한 바와 같이 단위 테스트는 상호 작용없이 실행되도록 설계되었습니다.

그러나 다른 코드와 마찬가지로 단위 테스트를 디버그 할 수 있습니다. 가장 쉬운 방법은 테스트 결과 탭에서 디버그 버튼을 사용하는 것입니다.

디버그 할 수 있다는 것은 중단 점을 사용할 수 있음을 의미합니다. 중단 점을 사용할 수 있다는 것은 Tracepoints 를 사용할 수 있다는 것을 의미하며 , 매일 디버깅에 매우 유용합니다.

기본적으로 추적 점을 사용하면 출력 창 (또는보다 정확하게는 표준 출력)에 쓸 수 있습니다. 선택적으로 계속 실행하거나 일반 중단 점처럼 중지 할 수 있습니다. 이를 통해 코드를 다시 작성하거나 디버그 정보로 채울 필요없이 원하는 “기능”을 얻을 수 있습니다.

중단 점을 추가 한 다음 해당 중단 점을 마우스 오른쪽 단추로 클릭하십시오. “히트시 …”옵션을 선택하십시오.
때 옵션

대화 상자가 나타납니다.
중단 점에 도달 한 경우

몇 가지 참고할 사항 :

  1. 중단 점이 이제 구형 대신 다이아몬드로 표시되어 추적 점을 나타냅니다.
  2. {this}와 같이 변수를 묶어 변수의 값을 출력 할 수 있습니다.
  3. “계속 실행”체크 상자를 선택 해제하여 일반 중단 점과 같이이 줄에서 코드를 끊으십시오.
  4. 매크로를 실행할 수있는 옵션이 있습니다. 주의하십시오-유해한 부작용을 일으킬 수 있습니다.

자세한 내용은 설명서를 참조하십시오.


답변

C #에서 Visual Studio 단위 테스트의 출력을 작성하는 방법에는 여러 가지가 있습니다.

  • Console.Write-Visual Studio 테스트 하니스가이를 캡처하여 테스트 탐색기에서 테스트를 선택하고 출력 링크를 클릭하면 표시합니다. 않습니다 하지 실행 중이거나 단위 테스트를 디버깅 할 때 Visual Studio 출력 창에 표시 (틀림없이이 버그).
  • Debug.Write-Visual Studio 테스트 하니스가이를 캡처하여 테스트 출력에 표시합니다. 않는 비주얼 스튜디오 디버깅 옵션이 직접 실행 창에 리디렉션 출력을 구성하지 않는 한, 단위 테스트를 디버깅 할 때 Visual Studio 출력 창에 표시됩니다. 디버깅하지 않고 테스트를 실행하면 출력 (또는 즉시) 창에 아무 것도 나타나지 않습니다. 기본적으로 디버그 빌드 (즉, DEBUG 상수가 정의 된 경우)에서만 사용 가능합니다.
  • Trace.Write-Visual Studio 테스트 하니스가이를 캡처하여 테스트 출력에 표시합니다. 않습니다 단위 테스트를 디버깅 할 때 (단순히 디버깅하지 않고 테스트를 실행하지 않는 경우)는 Visual Studio 출력 (또는 즉시) 창에 나타납니다. 기본적으로 디버그 및 릴리스 빌드 (즉, TRACE 상수가 정의 된 경우) 모두에서 사용할 수 있습니다.

Visual Studio 2013 Professional에서 확인되었습니다.


답변

당신이 사용할 수있는

Trace.WriteLine() 

단위 테스트를 디버깅 할 때 출력 창에 쓸 수 있습니다.


답변

Visual Studio 2017에서 “TestContext”는 테스트 탐색기에 출력 링크를 표시하지 않습니다. 그러나 Trace.Writeline ()은 출력 링크를 보여줍니다.