2017-10-27 5 views
0

내 라이브러리에는 Console.WriteLine()에 디버그 출력을 인쇄하는 몇 가지 백그라운드 스레드가 있습니다. 첫 번째 테스트에서 테스트 결과에서 백그라운드 스레드의 디버그 라인을 볼 수 있습니다. 그러나 다음 테스트에서는 더 이상이 출력이 표시되지 않습니다.왜 NUnit이 백그라운드 스레드의 콘솔 출력을 표시하지 않습니까?

테스트 메서드 자체에서 Console.WriteLine()을 호출하면 테스트 출력에 표시됩니다. 나는 디버깅을해야 함과 배경 테스트에서 테스트에서 테스트 전화

  • 첫 번째 Console.WriteLine()
  • 다음 IST 호출 Console.WriteLine을()
  • 마지막으로는에 Console.WriteLine()를 호출 다시 시험.

그러나 테스트 결과 만 직접 표시되며 백그라운드 스레드의 출력은 표시되지 않습니다.

NUnit이 스레드 컨텍스트에서 캡처 범위를 저장 한 것처럼 보입니다.

모든 백그라운드 스레드에서 콘솔 출력을 얻으려면 어떻게해야합니까?

+0

아마도 NUnit을 사용하여 문제를 열어야합니까? 불쾌감은 없지만 누구도 대답을하지 않을 것입니다. – NightOwl888

+2

TestContext.WriteLine()이 작동합니까? –

+0

@RobProuse 라이브러리에는 NUnit API에 대한 액세스 권한이 없습니다. – Horcrux7

답변

2

도서관은 우리가 시험에 추적을 할 수있는 로그 출력을 리디렉션 할 수있는 옵션이 있기 때문에 :

[SetUp] 
    public void FixtureSetUp() 
    { 
     MyLibrary.Console = TestContext.Out; 
    } 

좋은 해결책이 아니다 있습니다.

0

이것은 사용중인 NUnit 프레임 워크의 특정 런타임 빌드에 따라 다릅니다. 텍스트 캡처와 관련된 정보는 NUnit의 TestExecutionContext에서 유지되며 다른 빌드에 다르게 저장됩니다.

모든 데스크톱 빌드 (.NET 2.0, 3.5, 4.0 및 4.5)의 경우 현재 TestExecutionContextCallContext에 유지됩니다. TestExecutionClassILogicalThreadAffinative을 구현하므로 새 스레드가 만들어지면 컨텍스트가 테스트를 따릅니다.

두 개의 .NET 표준 빌드 (1.3 및 1.6)의 경우 컨텍스트는 스레드 로컬 저장소에 유지되므로 새 스레드 생성을 따르지 않습니다. 이것은 .NET Standard 2.0 빌드가있을 때 극복하기를 바란 한계입니다.