我想在几秒钟后检查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。
应该公开吗,因为我们可以在编辑器上对其进行更改?
答案 0 :(得分:1)
创建Clock
的新实例将不会设置其clockText
成员变量,因为它只能在检查器窗口或反序列化时设置。
因此,只有将clockText
设置为公共变量并自己进行设置,您的测试才会起作用。
另一种解决方法是完全消除对文本字段的依赖,并将时间值设为私有字符串变量(带有公共getter),这样您的时钟也可以在没有显示字段的情况下运行。