我已经写了我自己的访问层到游戏引擎。有一个GameLoop被调用每一帧,让我处理自己的代码。我能够做具体的事情,并检查这些事情是否发生。在一个非常基本的方式,它可能看起来像这样:如何测试异步代码
void cycle()
{
//set a specific value
Engine::setText("Hello World");
//read the value
std::string text = Engine::getText();
}
我想测试,如果我的Engine
- 层是通过写自动化测试工作。我有一些使用Boost Unittest Framework进行简单比较测试的经验。
问题是,我想要引擎做的一些事情只是在cycle()
的调用后处理。所以在Engine::setText(...)
之后直接调用Engine::getText()
会返回一个空字符串。如果我要等到cycle()
的下一个呼叫,则会返回正确的值。
我现在想知道如果我不能在同一个循环中处理它们,我应该如何编写测试。有没有最佳做法?在这样的环境中是否可以使用Boost Unittest Framework提供的“传统测试”方法?有没有其他框架针对这样一个专门的案例?
我在这里使用C++的一切,但我可以想象有与编程语言无关的答案。
UPDATE: 这是不可能访问Engine
外cycle()
除非引擎能够以完成处理的方式发出信号,否则我并不认为这有效。不过,非常好奇看到别人的答案。 –