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,94 @@
namespace Yh.SchClass.OpenApi.Tests;
/// <summary>聚合门面 <see cref="SchClassOpenApi"/> 与工厂 <see cref="SchClassOpenApiFactory"/> 的装配行为。</summary>
public class SchClassOpenApiFacadeTests
{
[Fact]
public void 门面装配全部10个子客户端()
{
var options = new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com/bschclass/oapi/" };
using var http = new HttpClient();
var api = new SchClassOpenApi(http, options);
Assert.NotNull(api.DbClass);
Assert.NotNull(api.VClass);
Assert.NotNull(api.Schooling);
Assert.NotNull(api.UserInfo);
Assert.NotNull(api.SchInfo);
Assert.NotNull(api.TeaInfo);
Assert.NotNull(api.StuInfo);
Assert.NotNull(api.TeachInfo);
Assert.NotNull(api.SubInfo);
Assert.NotNull(api.FamilyCompat);
Assert.Same(options, api.Options);
}
[Fact]
public void 门面构造_httpClient为空时抛()
{
Assert.Throws<ArgumentNullException>(
() => new SchClassOpenApi(null!, new SchClassOpenApiOptions()));
}
[Fact]
public void 门面构造_options为空时抛()
{
using var http = new HttpClient();
Assert.Throws<ArgumentNullException>(() => new SchClassOpenApi(http, null!));
}
[Fact]
public void 子客户端构造_参数为空时抛()
{
using var http = new HttpClient();
var options = new SchClassOpenApiOptions();
Assert.Throws<ArgumentNullException>(() => new SchClassVClassClient(null!, options));
Assert.Throws<ArgumentNullException>(() => new SchClassVClassClient(http, null!));
}
[Fact]
public void 工厂_按配置创建HttpClient()
{
var options = new SchClassOpenApiOptions
{
BaseHost = "http://base.yunhaixingtong.com/",
BasePath = "/bschclass",
ReadTimeoutMs = 3000,
};
using var http = SchClassOpenApiFactory.CreateHttpClient(options);
Assert.Equal(new Uri("http://base.yunhaixingtong.com/bschclass"), http.BaseAddress);
Assert.Equal(TimeSpan.FromMilliseconds(3000), http.Timeout);
}
[Fact]
public void 工厂_读超时非法时回落5秒()
{
var options = new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com", ReadTimeoutMs = 0 };
using var http = SchClassOpenApiFactory.CreateHttpClient(options);
Assert.Equal(TimeSpan.FromMilliseconds(5000), http.Timeout);
}
[Fact]
public void 工厂_创建完整门面()
{
var facade = SchClassOpenApiFactory.Create(new SchClassOpenApiOptions { BaseHost = "http://base.yunhaixingtong.com" });
Assert.NotNull(facade);
Assert.NotNull(facade.VClass);
Assert.NotNull(facade.StuInfo);
}
[Fact]
public void 工厂_配置为空时抛()
{
Assert.Throws<ArgumentNullException>(() => SchClassOpenApiFactory.CreateHttpClient(null!));
Assert.Throws<ArgumentNullException>(() => SchClassOpenApiFactory.Create(null!));
}
}