#3716·ebiten

音频: 在等待实时的测试中使用 testing/synctest

作者: hajimehoshi创建于 2026年9月17日更新于 2026年9月17日
标签featureos:linuxos:windowsos:macosos:androidos:iosos:freebsdos:js

候选人(均在 audio/audio_test.go 中)

测试 当前的实时等待
TestGC 使用 200 毫秒的睡眠轮询 PlayersCountForTesting(带有 TODO: 这是一个脏的技巧。是否可以使用虚拟时间?
TestDeferredDeviceCreation 相同的 200 毫秒轮询循环
TestSameSourcePlayers 相同的 200 毫秒轮询循环
TestPauseAndStopReadingTestPauseAndStopReadingWhilePaused waitForRead轮询加上 100 毫秒的“必须不读”的静音窗口
TestPositionNotGrowingAfterFinished 5 毫秒轮询,直到 4 秒的源完成,然后断言 Position() 在 100 毫秒的窗口内
TestPlayerErrorDoesNotStopOtherPlayers 5 毫秒轮询加上 100 毫秒的 Position() 进步窗口

这些测试所等待的内容都位于测试进程内部,并且只进行睡眠:Context 更新 Goroutine(audio.gotime.Sleep(time.Second / 100))、export_test.go 中的 dummyPlayer 读取 Goroutine(time.Sleep(time.Millisecond))和 stopwatch.gotime.Now / time.Since),这些都由 synctest 假装。因此,将测试体包装在 synctest.Test 中并在气泡中创建上下文即可将它们都放在假时钟上。

内容来源: hajimehoshi/ebiten