using System; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; using BaseGames.Enemies; namespace BaseGames.Tests.EditMode.Enemies { public class EnemyBrainContextBossFacetTests { // EnemyBase.Awake 会对缺失的碰撞体/引用报错,这些与本测试无关。 [SetUp] public void SetUp() => LogAssert.ignoreFailingMessages = true; [TearDown] public void TearDown() => LogAssert.ignoreFailingMessages = false; static T MakeEnemy(string name) where T : EnemyBase { var go = new GameObject(name); return go.AddComponent(); } [Test] public void NonBoss_AccessingBossFacet_Throws() { var enemy = MakeEnemy("plain-enemy"); var ctx = new EnemyBrainContext(enemy); Assert.Throws(() => { var _ = ctx.Boss; }); UnityEngine.Object.DestroyImmediate(enemy.gameObject); } [Test] public void Boss_AccessingBossFacet_ReturnsTheBoss() { var boss = MakeEnemy("boss"); var ctx = new EnemyBrainContext(boss); Assert.AreSame(boss, ctx.Boss); Assert.AreEqual(0, ctx.Boss.CurrentPhase); Assert.IsFalse(ctx.Boss.IsPhaseTransitioning); Assert.IsFalse(ctx.Boss.ResourceFull); // 未挂 BossResource UnityEngine.Object.DestroyImmediate(boss.gameObject); } } }