多轮审查评估

This commit is contained in:
2026-05-13 09:19:54 +08:00
parent 458f344e83
commit 1b37297585
57 changed files with 3019 additions and 218 deletions

View File

@@ -0,0 +1,133 @@
using NUnit.Framework;
using BaseGames.Combat.StatusEffects;
namespace BaseGames.Tests.EditMode
{
/// <summary>
/// StatusEffect 系统单元测试EditMode纯 C# 类,无需 MonoBehaviour
/// 覆盖:叠加规则、互斥规则、阻断规则、到期检测。
/// </summary>
[TestFixture]
public class StatusEffectTests
{
// ── 叠加规则 ─────────────────────────────────────────────────────────
[Test]
public void FireEffect_MaxStacks_IsOne()
{
var effect = new FireEffect();
Assert.AreEqual(1, effect.MaxStacks);
}
[Test]
public void PoisonEffect_MaxStacks_IsThree()
{
var effect = new PoisonEffect();
Assert.AreEqual(3, effect.MaxStacks);
}
[Test]
public void PoisonEffect_OnStack_IncreasesStackCount()
{
var effect = new PoisonEffect();
effect.OnStack();
Assert.AreEqual(2, effect.StackCount);
}
[Test]
public void PoisonEffect_OnStack_ClampsAtMaxStacks()
{
var effect = new PoisonEffect();
for (int i = 0; i < 10; i++) effect.OnStack();
Assert.AreEqual(effect.MaxStacks, effect.StackCount);
}
[Test]
public void StaggerEffect_MaxStacks_IsOne()
{
var effect = new StaggerEffect();
Assert.AreEqual(1, effect.MaxStacks);
}
// ── 互斥规则 ─────────────────────────────────────────────────────────
[Test]
public void FireEffect_MutualExclusions_ContainsFreeze()
{
var effect = new FireEffect();
Assert.Contains(StatusEffectType.Freeze, effect.MutualExclusions);
}
[Test]
public void PoisonEffect_MutualExclusions_IsEmpty()
{
var effect = new PoisonEffect();
Assert.IsEmpty(effect.MutualExclusions);
}
// ── 阻断规则 ─────────────────────────────────────────────────────────
[Test]
public void StaggerEffect_BlockedBy_ContainsStun()
{
var effect = new StaggerEffect();
Assert.Contains(StatusEffectType.Stun, effect.BlockedBy);
}
[Test]
public void FireEffect_BlockedBy_IsEmpty()
{
var effect = new FireEffect();
Assert.IsEmpty(effect.BlockedBy);
}
// ── 到期检测 ─────────────────────────────────────────────────────────
[Test]
public void StatusEffect_IsExpired_AfterDurationDepleted()
{
var effect = new StaggerEffect(0.5f);
effect.OnApply(null); // Owner 可为 null测试纯时间逻辑
effect.Update(0.3f);
Assert.IsFalse(effect.IsExpired);
effect.Update(0.3f); // 累计 0.6f > 0.5f
Assert.IsTrue(effect.IsExpired);
}
[Test]
public void FireEffect_OnStack_RefreshDuration()
{
var effectA = new FireEffect();
effectA.OnApply(null);
float initialDuration = effectA.Duration;
effectA.Update(1.0f); // 消耗部分时间
Assert.Less(effectA.Duration, initialDuration);
effectA.OnStack(); // 重叠施加,应刷新持续时间
Assert.AreEqual(initialDuration, effectA.Duration, 0.001f);
}
// ── 类型标识 ─────────────────────────────────────────────────────────
[Test]
public void FireEffect_EffectType_IsFire()
{
Assert.AreEqual(StatusEffectType.Fire, new FireEffect().EffectType);
}
[Test]
public void PoisonEffect_EffectType_IsPoison()
{
Assert.AreEqual(StatusEffectType.Poison, new PoisonEffect().EffectType);
}
[Test]
public void StaggerEffect_EffectType_IsStagger()
{
Assert.AreEqual(StatusEffectType.Stagger, new StaggerEffect().EffectType);
}
}
}