免责声明--我试着通过google/stackoverflow找到这个问题的答案,但我不知道如何定义这个问题(我不知道合适的术语)。
我有许多小的人工智能片段,如下面的内容。每个敌人类型都有一个._ai片段(如下所示),其中有一个函数next(),由主游戏循环中的有限状态机调用(fyi:只有当敌人从队列中转移时,next函数才会得到每次更新迭代的调用)。
的问题:如何测试每一种情况(考虑到一些敌人的AI片段可能更复杂,情况可能在1000次中发生1次)并确保代码是有效的?
在下面的示例中,如果我在blabla/1下添加了行count++,错误可能在很长一段时间内不会裁剪,因为Javascript解释器在到达特定路径之前不会捕获错误。在编译语言中,添加垃圾(如blabla/1 )将在编译时捕获。
// AI Snippet
this._ai = (function(commands){
var count = 0;
return {
next: function(onDone, goodies, baddies) {
// If the internal counter reaches
// 2, launch a super attack and
// reset the count
if(count >= 2) {
commands.super(onDone);
count = 0;
}
else {
// If not performing the super attack
// there is a 50% chance of calling
// the `attack` command
if(chance(50)) {
var target = goodies[0];
commands.attack(onDone, target);
}
// Or a 50% chance of calling the
// `charge` command
else {
commands.charge(onDone);
count++;
}
}
}
};
})(this._commands); 我可以操纵随机生成器从0-n返回一个值表,并对每个数字运行next 1000次。我只是不觉得这是具体的告诉我每一条路都是没有错误的。
发布于 2013-08-31 08:49:17
正如您所说的,单元测试必须测试每一条路径,这样才能确保所有的测试都正常工作。
但是您应该能够在您的测试中调用它之前决定该方法将遵循哪条路径,这样您就能够知道该方法行为是否是预期的,以及是否有任何错误。
因此,例如,如果每1000次执行中只有一次会遵循一条路径,则不需要测试所有0、1、2. 999情况。你只有一个结果的组合,这些结果表现得很明显。
例如,在显示的代码片段中,有以下几种情况:
归档的一个方法是通过嘲弄计数器来控制计数器和机会方法。
如果您想知道当计数器达到2并且调用下一个方法时会发生什么,只需传递一个带有2的计数器,然后调用next。您不需要通过真正传递所有代码就可以到达计数器上的2。
至于随机化器,在随机化器返回要测试的值之前,不需要尝试。让它成为一个模拟,并将其配置为适合您需要的每一种情况。
我希望这能帮到你。
https://stackoverflow.com/questions/18443021
复制相似问题