是否可以将原始程序输出重定向到XUnit输出?
我所能找到的就是如何打印XUnit测试的输出(请参见here)
“原始输出”是指我每次在程序中编写Console.WriteLine
或类似内容时,都希望在查看测试结果时该输出存在。
我知道可以将控制台输出重定向到其他文本编写器(source),如何设置测试以将所有输出重定向到Xunit?
答案 0 :(得分:0)
这是一个小工作,但可以实现。
就像您提到的那样,您遇到了ITestOutputHelper
。稍加努力,您就可以将Console
的输出重定向到实现TextWriter
的新类。
因此,如果您将以下内容放在一起:
public class RedirectOutput : TextWriter
{
private readonly ITestOutputHelper _output;
public RedirectOutput(ITestOutputHelper output)
{
_output = output;
}
public override Encoding Encoding { get; } // set some if required
public override void WriteLine(string? value)
{
_output.WriteLine(value);
}
}
然后在您的测试构造函数中(我怀疑您缺少该块吗?):
public class UnitTest1
{
public UnitTest1(ITestOutputHelper output)
{
Console.SetOut(new RedirectOutput(output));
}
...
}
这是我们从Console
到ITestOutputHelper
的重定向。
这样做的缺点是您将需要覆盖对Console
的每次使用。在代码中写入的调用。因此RedirectOutput
可能会变得很大。有关列表重载,请参见ms docs here。
我不知道其他任何方式-我希望它会更简单。当然在某处还有另一种解决方案。
但是,如果您还没有的话,至少这会让您前进。
对于在代码中使用控制台写入的设计,也可能值得重新思考。也许与自定义界面输出有关?