Unity3d 使用本地私有SerializedField的测试统一方法

Unity3d 使用本地私有SerializedField的测试统一方法,unity3d,Unity3d,我想在几秒钟后检查clockText.text的内容 公共类时钟:单一行为 { [序列化字段] textmesh prougui clockText; TextMeshProUGUI时钟文本{get{return ClockText;}} 浮动剩余秒数=0f; 公共无效开始计数(整数秒) { 剩余秒=秒; } 私有void更新() { 剩余秒数-=Time.deltaTime; ClockText.text=Math.Ceiling(剩余秒数).ToString(); } } 通过此测试: 公

我想在几秒钟后检查clockText.text的内容

公共类时钟:单一行为
{
[序列化字段]
textmesh prougui clockText;
TextMeshProUGUI时钟文本{get{return ClockText;}}
浮动剩余秒数=0f;
公共无效开始计数(整数秒)
{
剩余秒=秒;
}
私有void更新()
{
剩余秒数-=Time.deltaTime;
ClockText.text=Math.Ceiling(剩余秒数).ToString();
}
}
通过此测试:

公共类测试时钟
{
[单位测试]
公共IEnumerator ClockShowCorrectTime()
{
var clock=newgameobject().AddComponent();
时钟开始计数(2);
返回新的WaitForSeconds(1);
Assert.AreEqual(“00:01”,clock.ClockText.text);
}
}
但是当然
clock.ClockText
是空的。我想将时钟文本保持为私有,因此无法从测试中设置时钟文本


它是否应该是公共的,因为我们可以在编辑器上更改它?

创建
时钟的新实例将不会设置其
时钟文本
成员变量,因为它只能在检查器窗口中设置,或者在反序列化时设置

因此,只有将
clockText
设置为公共变量并自行设置,测试才会起作用


另一种解决方法是完全删除对文本字段的依赖关系,并将时间值设置为一个私有字符串变量(带有公共getter),这样时钟也可以在没有显示字段的情况下运行。

如果必须从另一个类设置它,则必须以某种方式将其设置为“是”
public
。。e使用
时钟文本
属性并添加
集合
或使用方法。如果可能的话,你也可以使用
GetComponent
或它的一个版本来获取运行时的参考,最后一句话实际上是这个答案最好的部分!最好是将实际值存储在类本身的某个位置,以便对其进行测试,而不是依赖于同一数据的某些外部表示。我认为,拥有一个不显示任何内容的组件是没有意义的。@TlmaK0对于UnityTest来说,正如frankhermes所说的,它足以在一个简单的基础上进行断言
字符串
字段而不是
文本
组件。。。。