Files

39 lines
1.2 KiB
C#
Raw Permalink Normal View History

2026-08-17 09:24:57 +08:00
using System.CommandLine;
namespace Gpulse.WCT.DataAnalyzer.Tests;
/// <summary>
/// 命令执行辅助:运行命令并捕获标准输出/标准错误。
/// 命令 handler 直接使用 Console.WriteLine因此重定向 System.Console 即可捕获;
/// System.CommandLine 自身的帮助/校验输出也会经默认控制台写入同一流。
/// </summary>
public static class CliTestExtensions
{
/// <summary>
/// 执行命令并返回 (退出码, 标准输出, 标准错误)。
/// </summary>
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);
}
}
}