如果您要构建解决方案并打开“MyApp.Console.Tests\bin\Debug\net7.0”和“MyApp.coonsole.Ttests\bin\Degug\net7.0”文件夹并比较内容,您会发现后者的文件比前者多得多-这些文件是自包含应用程序附带的运行时的一部分,是运行该应用程序所必需的。您可以设置一些精心设计的构建操作,以执行正确的应用程序发布到某个路径,并在测试项目中使用它,但我认为这是一种过于复杂且可能过于脆弱的方法。
你可以切换到“旧”
Program.Main
样式(如果项目是用
dotnet new console
CLI命令-提供
--use-program-main
因此无需手动更改),运行
Program.Main(args)
然后通过捕获“当前”控制台输出
Console.Out
以下为:
public sealed class ConsoleCapture : IDisposable
{
private readonly StringWriter _stringWriter = new();
private readonly TextWriter _oldOut;
private readonly TextWriter _oldErr;
public ConsoleCapture()
{
_oldOut = Console.Out;
_oldErr = Console.Error;
Console.SetOut(_stringWriter);
Console.SetError(_stringWriter);
}
public string GetAll()
{
return _stringWriter.ToString();
}
public void Dispose()
{
Console.SetOut(_oldOut);
Console.SetError(_oldErr);
_stringWriter.Dispose();
}
}
以及用法:
using var console = new ConsoleCapture();
var res = Program.Main(args);
var consoleOutput = console.GetAll();
Assert.AreEqual(expectedExitCode, res);
Assert.Contains("Hello World", res);
已打开
PR
举例说明。
注意事项
以下为: