using System.CommandLine; namespace Gpulse.WCT.DataAnalyzer.Tests; /// /// 命令执行辅助:运行命令并捕获标准输出/标准错误。 /// 命令 handler 直接使用 Console.WriteLine,因此重定向 System.Console 即可捕获; /// System.CommandLine 自身的帮助/校验输出也会经默认控制台写入同一流。 /// public static class CliTestExtensions { /// /// 执行命令并返回 (退出码, 标准输出, 标准错误)。 /// public static async Task<(int ExitCode, string StdOut, string StdErr)> RunCaptureAsync( this Command command, params string[] args) { var originalOut = Console.Out; var originalError = Console.Error; using var outWriter = new StringWriter(); using var errWriter = new StringWriter(); Console.SetOut(outWriter); Console.SetError(errWriter); try { var exitCode = await command.InvokeAsync(args); return (exitCode, outWriter.ToString(), errWriter.ToString()); } finally { Console.SetOut(originalOut); Console.SetError(originalError); } } }