Files
yunhai.netcore.tool/BasePlatformDotnet/tests/Yh.SchClass.OpenApi.Tests/SchClassTestHost.cs
T
2026-09-02 09:38:45 +08:00

38 lines
1.8 KiB
C#

namespace Yh.SchClass.OpenApi.Tests;
/// <summary>测试宿主:提供共享配置、门面实例与端点契约断言辅助。</summary>
internal static class SchClassTestHost
{
/// <summary>测试用配置(不设 BasePath,端点直接挂在根路径下)。</summary>
public static SchClassOpenApiOptions Options()
=> new() { BaseHost = "http://base.yunhaixingtong.com" };
/// <summary>用伪造 handler 装配门面。</summary>
public static SchClassOpenApi Api(FakeHandler handler)
=> new(new HttpClient(handler), Options());
/// <summary>回放一段无害响应(JSON 字面量 null),使任意端点都能安全走完解析流程。</summary>
public static FakeHandler Ok() => FakeHandler.Json(HttpStatusCode.OK, "null");
/// <summary>断言最近一次请求的 method / 路径 / query。</summary>
public static void Verify(FakeHandler handler, HttpMethod method, string path, string query = "")
{
var request = handler.LastRequest;
Assert.NotNull(request);
Assert.Equal(method, request!.Method);
Assert.Equal(path, request.RequestUri!.AbsolutePath);
Assert.Equal(query, Uri.UnescapeDataString(request.RequestUri.Query));
}
/// <summary>断言最近一次请求的方法、路径与请求体(用于 POST <c>@RequestBody String</c> 端点)。</summary>
public static void VerifyBody(FakeHandler handler, string path, string? body, string contentType = "text/plain")
{
var request = handler.LastRequest;
Assert.NotNull(request);
Assert.Equal(HttpMethod.Post, request!.Method);
Assert.Equal(path, request.RequestUri!.AbsolutePath);
Assert.Equal(body, handler.LastRequestBody);
Assert.Equal(contentType, handler.LastContentType);
}
}