mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-12 13:14:30 +08:00
refactor(game-tests): 清理指定加载测试的 MA0051
- 重构四个纯加载测试的固定布置为文件内私有 helper,缩短方法体长度而不改变断言语义 - 保持 schema 内容、异常路径与 item/monster 注册顺序不变,并避免触碰热重载测试
This commit is contained in:
parent
27f5a2f58e
commit
b27bcb5832
@ -1635,57 +1635,7 @@ public class YamlConfigLoaderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public async Task LoadAsync_Should_Accept_Object_Array_When_Contains_Matches_Declared_Subset_Properties()
|
public async Task LoadAsync_Should_Accept_Object_Array_When_Contains_Matches_Declared_Subset_Properties()
|
||||||
{
|
{
|
||||||
CreateConfigFile(
|
var loader = CreateLoaderForContainsSubsetObjectArrayScenario();
|
||||||
"monster/slime.yaml",
|
|
||||||
"""
|
|
||||||
id: 1
|
|
||||||
name: Slime
|
|
||||||
entries:
|
|
||||||
-
|
|
||||||
id: 1
|
|
||||||
weight: 2
|
|
||||||
-
|
|
||||||
id: 2
|
|
||||||
weight: 3
|
|
||||||
""");
|
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/monster.schema.json",
|
|
||||||
"""
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "name", "entries"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "integer" },
|
|
||||||
"name": { "type": "string" },
|
|
||||||
"entries": {
|
|
||||||
"type": "array",
|
|
||||||
"minContains": 1,
|
|
||||||
"contains": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id"],
|
|
||||||
"properties": {
|
|
||||||
"id": {
|
|
||||||
"type": "integer",
|
|
||||||
"const": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "weight"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "integer" },
|
|
||||||
"weight": { "type": "integer" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""");
|
|
||||||
|
|
||||||
var loader = new YamlConfigLoader(_rootPath)
|
|
||||||
.RegisterTable<int, MonsterWeightedEntryArrayConfigStub>("monster", "monster", "schemas/monster.schema.json",
|
|
||||||
static config => config.Id);
|
|
||||||
var registry = new ConfigRegistry();
|
var registry = new ConfigRegistry();
|
||||||
|
|
||||||
await loader.LoadAsync(registry);
|
await loader.LoadAsync(registry);
|
||||||
@ -2553,14 +2503,7 @@ public class YamlConfigLoaderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void LoadAsync_Should_Throw_When_Nested_Object_Array_Reference_Target_Is_Missing()
|
public void LoadAsync_Should_Throw_When_Nested_Object_Array_Reference_Target_Is_Missing()
|
||||||
{
|
{
|
||||||
CreateConfigFile(
|
var loader = CreateItemBackedMonsterLoader<MonsterPhaseDropConfigStub>(
|
||||||
"item/potion.yaml",
|
|
||||||
"""
|
|
||||||
id: potion
|
|
||||||
name: Potion
|
|
||||||
""");
|
|
||||||
CreateConfigFile(
|
|
||||||
"monster/slime.yaml",
|
|
||||||
"""
|
"""
|
||||||
id: 1
|
id: 1
|
||||||
name: Slime
|
name: Slime
|
||||||
@ -2571,21 +2514,7 @@ public class YamlConfigLoaderTests
|
|||||||
-
|
-
|
||||||
wave: 2
|
wave: 2
|
||||||
dropItemId: bomb
|
dropItemId: bomb
|
||||||
""");
|
""",
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/item.schema.json",
|
|
||||||
"""
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "name"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string" },
|
|
||||||
"name": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""");
|
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/monster.schema.json",
|
|
||||||
"""
|
"""
|
||||||
{
|
{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@ -2609,13 +2538,9 @@ public class YamlConfigLoaderTests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""");
|
""",
|
||||||
|
static config => config.Id,
|
||||||
var loader = new YamlConfigLoader(_rootPath)
|
("item/potion.yaml", "potion", "Potion"));
|
||||||
.RegisterTable<string, ItemConfigStub>("item", "item", "schemas/item.schema.json",
|
|
||||||
static config => config.Id)
|
|
||||||
.RegisterTable<int, MonsterPhaseDropConfigStub>("monster", "monster", "schemas/monster.schema.json",
|
|
||||||
static config => config.Id);
|
|
||||||
var registry = new ConfigRegistry();
|
var registry = new ConfigRegistry();
|
||||||
|
|
||||||
var exception = Assert.ThrowsAsync<ConfigLoadException>(() => loader.LoadAsync(registry));
|
var exception = Assert.ThrowsAsync<ConfigLoadException>(() => loader.LoadAsync(registry));
|
||||||
@ -2766,41 +2691,14 @@ public class YamlConfigLoaderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void LoadAsync_Should_Throw_When_Array_Reference_Item_Is_Missing()
|
public void LoadAsync_Should_Throw_When_Array_Reference_Item_Is_Missing()
|
||||||
{
|
{
|
||||||
CreateConfigFile(
|
var loader = CreateItemBackedMonsterLoader<MonsterDropArrayConfigStub>(
|
||||||
"item/potion.yaml",
|
|
||||||
"""
|
|
||||||
id: potion
|
|
||||||
name: Potion
|
|
||||||
""");
|
|
||||||
CreateConfigFile(
|
|
||||||
"item/slime-gel.yaml",
|
|
||||||
"""
|
|
||||||
id: slime_gel
|
|
||||||
name: Slime Gel
|
|
||||||
""");
|
|
||||||
CreateConfigFile(
|
|
||||||
"monster/slime.yaml",
|
|
||||||
"""
|
"""
|
||||||
id: 1
|
id: 1
|
||||||
name: Slime
|
name: Slime
|
||||||
dropItemIds:
|
dropItemIds:
|
||||||
- potion
|
- potion
|
||||||
- missing_item
|
- missing_item
|
||||||
""");
|
""",
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/item.schema.json",
|
|
||||||
"""
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "name"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string" },
|
|
||||||
"name": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""");
|
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/monster.schema.json",
|
|
||||||
"""
|
"""
|
||||||
{
|
{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@ -2815,13 +2713,10 @@ public class YamlConfigLoaderTests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""");
|
""",
|
||||||
|
static config => config.Id,
|
||||||
var loader = new YamlConfigLoader(_rootPath)
|
("item/potion.yaml", "potion", "Potion"),
|
||||||
.RegisterTable<string, ItemConfigStub>("item", "item", "schemas/item.schema.json",
|
("item/slime-gel.yaml", "slime_gel", "Slime Gel"));
|
||||||
static config => config.Id)
|
|
||||||
.RegisterTable<int, MonsterDropArrayConfigStub>("monster", "monster", "schemas/monster.schema.json",
|
|
||||||
static config => config.Id);
|
|
||||||
var registry = new ConfigRegistry();
|
var registry = new ConfigRegistry();
|
||||||
|
|
||||||
var exception = Assert.ThrowsAsync<ConfigLoadException>(() => loader.LoadAsync(registry));
|
var exception = Assert.ThrowsAsync<ConfigLoadException>(() => loader.LoadAsync(registry));
|
||||||
@ -2841,35 +2736,14 @@ public class YamlConfigLoaderTests
|
|||||||
[Test]
|
[Test]
|
||||||
public void LoadAsync_Should_Throw_When_Contains_Matched_Reference_Target_Is_Missing()
|
public void LoadAsync_Should_Throw_When_Contains_Matched_Reference_Target_Is_Missing()
|
||||||
{
|
{
|
||||||
CreateConfigFile(
|
var loader = CreateItemBackedMonsterLoader<MonsterDropArrayConfigStub>(
|
||||||
"item/potion.yaml",
|
|
||||||
"""
|
|
||||||
id: potion
|
|
||||||
name: Potion
|
|
||||||
""");
|
|
||||||
CreateConfigFile(
|
|
||||||
"monster/slime.yaml",
|
|
||||||
"""
|
"""
|
||||||
id: 1
|
id: 1
|
||||||
name: Slime
|
name: Slime
|
||||||
dropItemIds:
|
dropItemIds:
|
||||||
- potion
|
- potion
|
||||||
- missing_item
|
- missing_item
|
||||||
""");
|
""",
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/item.schema.json",
|
|
||||||
"""
|
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"required": ["id", "name"],
|
|
||||||
"properties": {
|
|
||||||
"id": { "type": "string" },
|
|
||||||
"name": { "type": "string" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""");
|
|
||||||
CreateSchemaFile(
|
|
||||||
"schemas/monster.schema.json",
|
|
||||||
"""
|
"""
|
||||||
{
|
{
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@ -2890,13 +2764,9 @@ public class YamlConfigLoaderTests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
""");
|
""",
|
||||||
|
static config => config.Id,
|
||||||
var loader = new YamlConfigLoader(_rootPath)
|
("item/potion.yaml", "potion", "Potion"));
|
||||||
.RegisterTable<string, ItemConfigStub>("item", "item", "schemas/item.schema.json",
|
|
||||||
static config => config.Id)
|
|
||||||
.RegisterTable<int, MonsterDropArrayConfigStub>("monster", "monster", "schemas/monster.schema.json",
|
|
||||||
static config => config.Id);
|
|
||||||
var registry = new ConfigRegistry();
|
var registry = new ConfigRegistry();
|
||||||
|
|
||||||
var exception = Assert.ThrowsAsync<ConfigLoadException>(() => loader.LoadAsync(registry));
|
var exception = Assert.ThrowsAsync<ConfigLoadException>(() => loader.LoadAsync(registry));
|
||||||
@ -3353,6 +3223,111 @@ public class YamlConfigLoaderTests
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 为对象数组 <c>contains</c> 子集匹配场景创建加载器,避免测试方法体被大段固定 schema 稀释。
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>已注册目标表的加载器。</returns>
|
||||||
|
private YamlConfigLoader CreateLoaderForContainsSubsetObjectArrayScenario()
|
||||||
|
{
|
||||||
|
CreateConfigFile(
|
||||||
|
"monster/slime.yaml",
|
||||||
|
"""
|
||||||
|
id: 1
|
||||||
|
name: Slime
|
||||||
|
entries:
|
||||||
|
-
|
||||||
|
id: 1
|
||||||
|
weight: 2
|
||||||
|
-
|
||||||
|
id: 2
|
||||||
|
weight: 3
|
||||||
|
""");
|
||||||
|
CreateSchemaFile(
|
||||||
|
"schemas/monster.schema.json",
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "name", "entries"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"name": { "type": "string" },
|
||||||
|
"entries": {
|
||||||
|
"type": "array",
|
||||||
|
"minContains": 1,
|
||||||
|
"contains": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer",
|
||||||
|
"const": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "weight"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "integer" },
|
||||||
|
"weight": { "type": "integer" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""");
|
||||||
|
|
||||||
|
return new YamlConfigLoader(_rootPath)
|
||||||
|
.RegisterTable<int, MonsterWeightedEntryArrayConfigStub>("monster", "monster", "schemas/monster.schema.json",
|
||||||
|
static config => config.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 为跨表引用加载测试创建标准 item 表夹具,并按既有顺序注册 <c>item</c> 与 <c>monster</c>。
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TMonsterConfig">monster 表的配置类型。</typeparam>
|
||||||
|
/// <param name="monsterConfigContent">monster 配置文件内容。</param>
|
||||||
|
/// <param name="monsterSchemaContent">monster schema 内容。</param>
|
||||||
|
/// <param name="keySelector">monster 表主键选择器。</param>
|
||||||
|
/// <param name="items">要写入的 item 配置文件集合。</param>
|
||||||
|
/// <returns>已完成 schema 与表注册的加载器。</returns>
|
||||||
|
private YamlConfigLoader CreateItemBackedMonsterLoader<TMonsterConfig>(
|
||||||
|
string monsterConfigContent,
|
||||||
|
string monsterSchemaContent,
|
||||||
|
Func<TMonsterConfig, int> keySelector,
|
||||||
|
params (string RelativePath, string ItemId, string Name)[] items)
|
||||||
|
{
|
||||||
|
foreach (var (relativePath, itemId, name) in items)
|
||||||
|
{
|
||||||
|
CreateConfigFile(
|
||||||
|
relativePath,
|
||||||
|
$"""
|
||||||
|
id: {itemId}
|
||||||
|
name: {name}
|
||||||
|
""");
|
||||||
|
}
|
||||||
|
|
||||||
|
CreateConfigFile("monster/slime.yaml", monsterConfigContent);
|
||||||
|
CreateSchemaFile(
|
||||||
|
"schemas/item.schema.json",
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
"type": "object",
|
||||||
|
"required": ["id", "name"],
|
||||||
|
"properties": {
|
||||||
|
"id": { "type": "string" },
|
||||||
|
"name": { "type": "string" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""");
|
||||||
|
CreateSchemaFile("schemas/monster.schema.json", monsterSchemaContent);
|
||||||
|
|
||||||
|
return new YamlConfigLoader(_rootPath)
|
||||||
|
.RegisterTable<string, ItemConfigStub>("item", "item", "schemas/item.schema.json",
|
||||||
|
static config => config.Id)
|
||||||
|
.RegisterTable<int, TMonsterConfig>("monster", "monster", "schemas/monster.schema.json", keySelector);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 创建测试用配置文件。
|
/// 创建测试用配置文件。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user