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。
///