IT

단위 테스트에서 콘솔에 쓸 수 있습니까?

lottoking 2020. 7. 15. 07:14
반응형

단위 테스트에서 콘솔에 쓸 수 있습니까? 왜 콘솔 창이 열리지 보리 지 꼭 보입니까?


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을 통해 단위 테스트를 실행하면 표준 출력이 테스트 하네스에 의해 리디렉션되고 테스트 출력의 일부로 저장됩니다. 테스트 결과 창을 마우스 오른쪽 버튼으로 클릭하고 "출력 (StdOut)"을 열을 앰 퍼런 스에 추가하면 정보를 볼 수 있습니다. 이것은 stdout에 존재하는 모든 것을 보여줄 것입니다.

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

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


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

우리는 Console.WriteLine을 바로 사용할 수 있고 출력은 테스트 창에서가 아니라 테스트 세부 사항에서 "출력"을 클릭하면 새 창에 표시됩니다.

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


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

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

희망이 도움이


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

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

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

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

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

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

몇 가지 참고할 사항 :

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

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


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

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

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


당신이 사용할 수있는

Trace.WriteLine() 

unittest를 할 때 출력합니다.


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


우선 단위 테스트는 설계 상 상호 작용없이 실행 가능합니다.

그 외에는 생각했던 가능성이 가능성이 있다고 생각합니다.

현재 애플리케이션이 GUI 애플리케이션 인 경우에도 콘솔을 여는 AllocConsole P / Invoke로 해킹을 시도 할 수 있습니다. Console클래스는 지금 열려 콘솔에 게시 할 예정입니다.


Debug.WriteLine ()도 사용할 수 있습니다.


IMHO 메시지는 대부분의 경우 실패한 테스트 케이스에만 적용됩니다. 아래 형식을 구성 했으니 직접 만들 수 있습니다. 이것은 VS 테스트 탐색기 창 자체에 표시됩니다.

VS 테스트 탐색기 창 에서이 메시지를 던지는 방법은 무엇입니까? 이와 같은 샘플 코드가 작동합니다.

if(test_condition_fails)
    Assert.Fail(@"Test Type: Positive/Negative.
                Mock Properties: someclass.propertyOne: True
                someclass.propertyTwo: True
                Test Properties: someclass.testPropertyOne: True
                someclass.testPropertyOne: False
                Reason for Failure: The Mail was not sent on Success Task completion.");

이에 대한 별도의 수업을 사용할 수 있습니다. 도움이 되셨기를 바랍니다.


Mac 용 Visual Studio

다른 솔루션은 Mac 용 VS에서 작동하지 않습니다.

NUnit 을 사용하는 경우 솔루션에 작은 .NET 콘솔 프로젝트추가하면 다음 콘솔 프로젝트참조 에서 테스트하려는 프로젝트를 참조 할 수 있습니다 .

이 당신의 당신 일을하고 어떤 [Test()]방법이 수행 할 수 있습니다 Main이 방식으로 콘솔 응용 프로그램의 :

class MainClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Console");

        // Reproduce the Unit Test
        var classToTest = new ClassToTest();
        var expected = 42;
        var actual = classToTest.MeaningOfLife();
        Console.WriteLine($"Pass: {expected.Equals(actual)}, expected={expected}, actual={actual}");
    }
}

무료로 당신은 사용할 수 있습니다 Console.WriteConsole.WriteLine이러한 상황에서 코드입니다.

참고 : https://stackoverflow.com/questions/11209639/can-i-write-into-console-in-a-unit-test-if-yes-why-the-console-window-is-not-o

반응형