UI相关优化补充
This commit is contained in:
79
Assets/Tests/PlayMode/ToastManagerTests.cs
Normal file
79
Assets/Tests/PlayMode/ToastManagerTests.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using System.Collections;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.TestTools;
|
||||
using TMPro;
|
||||
using BaseGames.UI;
|
||||
|
||||
namespace BaseGames.Tests.PlayMode
|
||||
{
|
||||
/// <summary>
|
||||
/// ToastManager 队列行为测试:
|
||||
/// · Enqueue 一条后 Toast 激活并最终隐藏
|
||||
/// · 连续 Enqueue 3 条按序串行播放
|
||||
///
|
||||
/// 不依赖事件频道(直接调用 Enqueue),不依赖本地化(标题/正文为常量字符串)。
|
||||
/// </summary>
|
||||
public class ToastManagerTests
|
||||
{
|
||||
private GameObject _host;
|
||||
private ToastManager _mgr;
|
||||
private ToastNotification _toast;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_host = new GameObject("ToastHost");
|
||||
|
||||
// Toast 预制:CanvasGroup + 子文本
|
||||
var toastGO = new GameObject("Toast", typeof(CanvasGroup));
|
||||
toastGO.transform.SetParent(_host.transform);
|
||||
toastGO.SetActive(false);
|
||||
_toast = toastGO.AddComponent<ToastNotification>();
|
||||
// 反射注入 _displayDuration / _fadeDuration 减为短值,缩短测试时长
|
||||
SetPrivate(_toast, "_displayDuration", 0.05f);
|
||||
SetPrivate(_toast, "_fadeDuration", 0.02f);
|
||||
|
||||
_mgr = _host.AddComponent<ToastManager>();
|
||||
SetPrivate(_mgr, "_toast", _toast);
|
||||
_host.SetActive(false);
|
||||
_host.SetActive(true); // 触发 Awake/OnEnable
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown() { Object.DestroyImmediate(_host); }
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator Enqueue_ShowsThenHides()
|
||||
{
|
||||
_mgr.Enqueue("T", "B", null);
|
||||
yield return null;
|
||||
Assert.IsTrue(_toast.gameObject.activeSelf, "入队后 Toast 应当激活");
|
||||
|
||||
// 总时长 ~= 0.02+0.05+0.02 = 0.09s,再 + 队列等待 0.1s
|
||||
yield return new WaitForSecondsRealtime(0.5f);
|
||||
Assert.IsFalse(_toast.gameObject.activeSelf, "Toast 自动隐藏未生效");
|
||||
}
|
||||
|
||||
[UnityTest]
|
||||
public IEnumerator MultipleEnqueue_PlaysSerially()
|
||||
{
|
||||
_mgr.Enqueue("A", "1", null);
|
||||
_mgr.Enqueue("B", "2", null);
|
||||
yield return null;
|
||||
Assert.IsTrue(_toast.gameObject.activeSelf, "第一条应当立即播放");
|
||||
// 不严格验证内容(涉及私有字段),只验证活动状态推进。
|
||||
yield return new WaitForSecondsRealtime(1.0f);
|
||||
Assert.IsFalse(_toast.gameObject.activeSelf, "两条串行播放后应当全部结束");
|
||||
}
|
||||
|
||||
// ── 反射工具 ──────────────────────────────────────────────────────
|
||||
private static void SetPrivate(object target, string fieldName, object value)
|
||||
{
|
||||
var f = target.GetType().GetField(fieldName,
|
||||
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
|
||||
f?.SetValue(target, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user