This commit is contained in:
wanghu
2026-09-02 09:38:45 +08:00
commit 8774b6cc44
128 changed files with 9382 additions and 0 deletions
@@ -0,0 +1,58 @@
namespace Yh.SchClass.OpenApi.Tests;
/// <summary>
/// 伪造 <see cref="HttpMessageHandler"/>:捕获最近一次请求并回放预设响应。
/// 与 <c>Yh.Platform.OpenApi.Tests</c> 的 FakeHandler 同构,便于两个 SDK 的测试互相参照。
/// </summary>
public sealed class FakeHandler : HttpMessageHandler
{
private readonly Func<HttpRequestMessage, string?, HttpResponseMessage> _responder;
public FakeHandler(Func<HttpRequestMessage, string?, HttpResponseMessage> responder)
{
_responder = responder;
}
/// <summary>最近一次捕获到的请求。</summary>
public HttpRequestMessage? LastRequest { get; private set; }
/// <summary>最近一次请求体(无请求体时为 null)。</summary>
public string? LastRequestBody { get; private set; }
/// <summary>最近一次请求体的 Content-Type(无请求体时为 null)。</summary>
public string? LastContentType { get; private set; }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
LastRequest = request;
if (request.Content == null)
{
LastRequestBody = null;
LastContentType = null;
}
else
{
LastRequestBody = await request.Content.ReadAsStringAsync(cancellationToken);
LastContentType = request.Content.Headers.ContentType?.MediaType;
}
return _responder(request, LastRequestBody);
}
/// <summary>回放一段固定 JSON(application/json)。</summary>
public static FakeHandler Json(HttpStatusCode statusCode, string json)
=> new((_, _) => new HttpResponseMessage(statusCode)
{
Content = new StringContent(json, Encoding.UTF8, "application/json"),
});
/// <summary>回放指定状态码且无响应体(模拟 204 / 404 空响应)。</summary>
public static FakeHandler Empty(HttpStatusCode statusCode)
=> new((_, _) => new HttpResponseMessage(statusCode));
/// <summary>回放纯文本响应(模拟非 JSON 的错误页)。</summary>
public static FakeHandler Text(HttpStatusCode statusCode, string text)
=> new((_, _) => new HttpResponseMessage(statusCode)
{
Content = new StringContent(text, Encoding.UTF8, "text/plain"),
});
}