From 24863523414029a3de2a28f03b5a938f021c6c8d Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Fri, 17 Apr 2026 10:15:04 +0800 Subject: [PATCH] =?UTF-8?q?test(config):=20=E6=B7=BB=E5=8A=A0YAML=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8A=A0=E8=BD=BD=E5=99=A8dependentSchemas=E7=BA=A6?= =?UTF-8?q?=E6=9D=9F=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 验证触发字段出现但条件schema未满足时抛出异常 - 验证触发字段缺席时不会误触发dependentSchemas检查 - 验证触发字段出现且条件schema满足时正常加载对象 - 验证非对象dependentSchemas声明在解析阶段被拒绝 - 验证dependentSchemas触发字段必须在同级properties中显式声明 - 验证dependentSchemas只接受object-typed条件子schema - 实现临时目录创建和清理避免文件堆积 - 提供完整的测试用例覆盖dependentSchemas各种场景 --- .../YamlConfigLoaderDependentSchemasTests.cs | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/GFramework.Game.Tests/Config/YamlConfigLoaderDependentSchemasTests.cs b/GFramework.Game.Tests/Config/YamlConfigLoaderDependentSchemasTests.cs index 19245013..e936db2d 100644 --- a/GFramework.Game.Tests/Config/YamlConfigLoaderDependentSchemasTests.cs +++ b/GFramework.Game.Tests/Config/YamlConfigLoaderDependentSchemasTests.cs @@ -252,6 +252,60 @@ public sealed class YamlConfigLoaderDependentSchemasTests }); } + /// + /// 验证 dependentSchemas 的触发字段必须在同级 properties 中显式声明。 + /// + [Test] + public void LoadAsync_Should_Throw_When_DependentSchemas_Trigger_Is_Not_Declared() + { + CreateConfigFile( + "monster/slime.yaml", + """ + id: 1 + reward: + itemId: potion + """); + CreateSchemaFile( + "schemas/monster.schema.json", + """ + { + "type": "object", + "required": ["id", "reward"], + "properties": { + "id": { "type": "integer" }, + "reward": { + "type": "object", + "properties": { + "itemCount": { "type": "integer" } + }, + "dependentSchemas": { + "itemId": { + "type": "object", + "properties": { + "itemCount": { "type": "integer" } + } + } + } + } + } + } + """); + + var loader = CreateMonsterRewardLoader(); + var registry = CreateRegistry(); + + var exception = Assert.ThrowsAsync(async () => await loader.LoadAsync(registry)); + + Assert.Multiple(() => + { + Assert.That(exception, Is.Not.Null); + Assert.That(exception!.Diagnostic.FailureKind, Is.EqualTo(ConfigLoadFailureKind.SchemaUnsupported)); + Assert.That(exception.Diagnostic.DisplayPath, Is.EqualTo("reward")); + Assert.That(exception.Message, Does.Contain("dependentSchemas' for undeclared property 'itemId'")); + Assert.That(registry.Count, Is.EqualTo(0)); + }); + } + /// /// 验证 dependentSchemas 只接受 object-typed 条件子 schema。 ///