Skip to content

Forward standard output of testhost#4998

Merged
nohwnd merged 5 commits into
mainfrom
capture-and-forward-output
May 2, 2024
Merged

Forward standard output of testhost#4998
nohwnd merged 5 commits into
mainfrom
capture-and-forward-output

Conversation

@nohwnd
Copy link
Copy Markdown
Member

@nohwnd nohwnd commented Apr 25, 2024

Description

When Tests write output using Console.WriteLine it may or might not be seen by the user, depending on which target framework they are using, which OS, and which testing framework.

When it is seen:

User is running .NET Framework tests in-process, is using vstest.console 17.6.3 or earlier, and is not using MSTest.
User is running tests on Linux.

When it is not seen:

  • User uses .NET on Windows.
  • User uses MSTest pre 3.3.2, or 3.3.2+ without <MSTest><CaptureTraceOutput>false</CaptureTraceOutput></MSTest> option.
  • User uses vstest.console 17.7.0 or newer with .NET Framework in-process or out of process.
  • User is running in isolation on Windows:
    • always under dotnet test
    • always under Visual Studio
    • for .NET workloads under vstest.console

Solution

This pull request standardizes the output capturing and passing to parent processes via Informational TestMessage. This same mechanism is used by xUnit to send their [xUnit.net 00:00:00.11] Starting: xunit001 messages.

Two options are added and enabled by default:

<RunSettings>
    <RunConfiguration>
        <CaptureStandardOutput>true</CaptureStandardOutput>
        <ForwardStandardOutput>true</ForwardStandardOutput>
    </RunConfiguration>
</RunSettings>

CaptureStandardOutput enables output capturing by VSTest. When disabled the behavior returns to the one of 17.6.3 and earlier.
ForwardStandardOutput enables output forwarding. When enabled it forwards output to VS.

When disabled, but CaptureStandardOutput is enabled it will suppress all output and return to behavior in 17.7.0 and newer.

Additionally two feature flags are added to allow easier global opt-out:

VSTEST_DISABLE_STANDARD_OUTPUT_CAPTURING
VSTEST_DISABLE_STANDARD_OUTPUT_FORWARDING

Setting them to 1 has the same effect as setting the above options to FALSE.

Related issue

Fix #799
Fix #4828
Fix #4947

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants