在 xUnit.net 测试项目中,Console.WriteLine() 的输出都被屏蔽了,请问 xUnit 是如何做到的?
console.out=***,可能大概是这样子
console.setout
只在 ExceptionAndOutputCaptureCommandTests.cs 用到了 Console.SetOut ,但这只是单元测试中的代码
TextWriter newOut = new StringWriter();
TextWriter newError = new StringWriter();
Console.SetOut(newOut);
Console.SetError(newError);
StubCommand cmd = new StubCommand();
var outputCmd = new ExceptionAndOutputCaptureCommand(cmd, null);
outputCmd.Execute(null);
@dudu:
启动单独的一个进程进行测试,所有输出内容都在他的进程内。
如果是集成在vs里面的,应该是启动的一个vs的task,输出内容到他注册的vs output里面。
@czd890: 你的这个回复让我豁然开朗,xUnit 并没有屏蔽控制台输出,只是 Console.WriteLine 在另外一个进程中输出,在当前控制台进程中看不到
@czd890: 改用 dotnet xunit
运行测试就能正常输出控制台了
今天发现在 git bash 中可以正常输出到控制台,只是在 PowerShell 与 Windows 命令行中有这个问题。
@dudu: 这是2个系统的机制问题。win下面是完成独立的2个进程。linux下面有点父子进程。好比在终端里面运行一条命令。这条命令是运行在单独的进程种,但是是由父进程fork出来。 所有父子进程打印的内容都在终端上显示