首页 新闻 会员 周边

请问 xUnit 在 .NET Core 中是如何屏蔽控制台输出的

0
悬赏园豆:50 [已解决问题] 解决于 2018-07-30 17:24

在 xUnit.net 测试项目中,Console.WriteLine() 的输出都被屏蔽了,请问 xUnit 是如何做到的?

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2018-07-29 23:00
< >
分享
最佳答案
0

console.out=***,可能大概是这样子

收获园豆:50
czd890 | 专家六级 |园豆:14412 | 2018-07-30 11:27

console.setout

czd890 | 园豆:14412 (专家六级) | 2018-07-30 11:29

只在 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 | 园豆:30994 (高人七级) | 2018-07-30 12:20

@dudu:

启动单独的一个进程进行测试,所有输出内容都在他的进程内。

如果是集成在vs里面的,应该是启动的一个vs的task,输出内容到他注册的vs output里面。

czd890 | 园豆:14412 (专家六级) | 2018-07-30 16:52

@czd890: 你的这个回复让我豁然开朗,xUnit 并没有屏蔽控制台输出,只是 Console.WriteLine 在另外一个进程中输出,在当前控制台进程中看不到

dudu | 园豆:30994 (高人七级) | 2018-07-30 17:23

@czd890: 改用 dotnet xunit 运行测试就能正常输出控制台了

dudu | 园豆:30994 (高人七级) | 2018-07-30 17:53

今天发现在 git bash 中可以正常输出到控制台,只是在 PowerShell 与 Windows 命令行中有这个问题。

dudu | 园豆:30994 (高人七级) | 2018-08-02 12:13

@dudu: 这是2个系统的机制问题。win下面是完成独立的2个进程。linux下面有点父子进程。好比在终端里面运行一条命令。这条命令是运行在单独的进程种,但是是由父进程fork出来。 所有父子进程打印的内容都在终端上显示

czd890 | 园豆:14412 (专家六级) | 2018-08-02 14:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册