using System; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; using BaseGames.Enemies; namespace BaseGames.Tests.EditMode.Enemies { public class EnemyBrainContextBossFacetTests { // 本项目关闭了 Domain/Scene Reload,EditMode 测试跑在当前打开的场景上: // 建出来的物体必须在 TearDown 里销毁,断言失败时才不会把物体永久留在场景里。 GameObject _go; // EnemyBase.Awake 会对缺失的碰撞体/引用报错,这些与本测试无关。 [SetUp] public void SetUp() => LogAssert.ignoreFailingMessages = true; [TearDown] public void TearDown() { LogAssert.ignoreFailingMessages = false; if (_go != null) UnityEngine.Object.DestroyImmediate(_go); _go = null; } T MakeEnemy(string name) where T : EnemyBase { _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; }); } [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); // 未挂 BossResource:图查询资源满值属配置错误,必须抛而不是静默返回 false Assert.Throws(() => { var _ = ctx.Boss.ResourceFull; }); } } }