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);
}
}
}