unity3d - 测试使用本地私有 SerializedField 的 Unity 方法
问题描述
我想在几秒钟后检查clockText.text 的内容。
public class Clock : MonoBehaviour
{
[SerializeField]
TextMeshProUGUI clockText;
TextMeshProUGUI ClockText { get { return clockText; } }
float remainingSeconds = 0f;
public void StartCountDown(int seconds)
{
remainingSeconds = seconds;
}
private void Update()
{
remainingSeconds -= Time.deltaTime;
ClockText.text = Math.Ceiling(remainingSeconds).ToString();
}
}
通过这个测试:
public class TestClock
{
[UnityTest]
public IEnumerator ClockShowCorrectTime()
{
var clock = new GameObject().AddComponent<Components.Shot.Clock>();
clock.StartCountDown(2);
yield return new WaitForSeconds(1);
Assert.AreEqual("00:01", clock.ClockText.text);
}
}
但当然clock.ClockText
是空的。而且我想将clockText保密,所以我不能从测试中设置clockText。
它是否应该公开,因为我们可以在编辑器上更改它?
解决方案
创建一个新的实例Clock
不会设置其clockText
成员变量,因为它只能在检查器窗口中设置,或者在反序列化时设置。
clockText
因此,只有在您创建公共变量并自行设置时,您的测试才会起作用。
另一种解决方法是完全消除对文本字段的依赖,并使时间值只是一个私有字符串变量(带有公共 getter),这样您的时钟也可以在没有显示字段的情况下运行。
推荐阅读
- android - 将在 LXC 中运行的远程 Android 应用程序显示到智能手机
- javascript - 我可以从剑道 UI MVC 项目中删除什么
- unity3d - (Unity)如何将数据(Vector3 和 Color32)烘焙到渲染纹理上?
- sql - 将行插入具有日期条件的表中
- javascript - 样式加载器未在我的中加载 css
- ssl - 使用 webhooks 的 vernemq 身份验证
- excel - 重复内容控制项的索引
- c# - 如何在 C# 中创建小于 384 位的 RSA 密钥
- django - 在 django 中批量更新时出现死锁
- batch-file - 使用 xcopy 备份完整文件夹,即使只有一个文件是新的