MOn*_*DaR 5 c++ testing automated-tests asynchronous
我已经为游戏引擎编写了自己的访问层.每个帧都会调用一个GameLoop,让我可以处理自己的代码.我能够做具体的事情,并检查这些事情是否发生.它以一种非常基本的方式看起来像这样:
void cycle()
{
//set a specific value
Engine::setText("Hello World");
//read the value
std::string text = Engine::getText();
}
Run Code Online (Sandbox Code Playgroud)
我想Engine通过编写自动化测试来测试我的-layer是否正常工作.我有一些使用Boost Unittest Framework进行简单比较测试的经验.
问题是,我希望引擎做的一些事情只是在调用之后处理cycle().所以Engine::getText()直接调用Engine::setText(...)会返回一个空字符串.如果我要等到下一次cycle()正确值的调用将被返回.
我现在想知道如果不能在同一个循环中处理它们,我应该如何编写测试.有没有最佳做法?是否可以在这样的环境中使用Boost Unittest Framework提供的"传统测试"方法?是否有其他框架针对这种专门案例?
我在这里使用C++,但我可以想象有一些与编程语言无关的答案.
更新:无法访问Engine外部cycle()
Ram*_*nda -1
您有两种选择:
如果您拥有的库可以同步使用或使用 c++11 futures 之类的工具(可以指示结果的准备情况),那么在您的测试用例中您可以执行以下操作
void testcycle()
{
//set a specific value
Engine::setText("Hello World");
while (!Engine::isResultReady());
//read the value
assert(Engine::getText() == "WHATEVERVALUEYOUEXPECT");
}
Run Code Online (Sandbox Code Playgroud)
如果你没有上述最好的,你可以设置超时(但这不是一个好的选择,因为你可能会遇到虚假的失败):
void testcycle()
{
//set a specific value
Engine::setText("Hello World");
while (Engine::getText() != "WHATEVERVALUEYOUEXPECT") {
wait(1 millisec);
if (total_wait_time > 1 sec) // you can put whatever max time
assert(0);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |