处理对测试套件中外部资源的附带访问

时间:2014-01-02 12:30:30

标签: unit-testing integration-testing

我正在为游戏Bitfighter设计测试套件,并且我不确定如何实现涉及偶然访问外部资源的测试。

我正在为一个名为RobotManager的类编写测试,顾名思义,它管理机器人玩家;具体来说,在这种情况下,我正在测试RobotManager添加和删除机器人的方式,因为人类玩家加入并退出游戏。

我要测试的一个场景涉及加载一个指定两个机器人玩家的关卡。解析级别描述时,它包含一个加载外部机器人脚本的指令;如果该脚本不存在,则会生成错误,并且机器人不会添加到游戏中。

为了我的测试目的,我实际上并不需要一个脚本 - 如果机器人什么都不做,那很好;我只需看看RobotManager如何处理机器人,因为玩家来来往往。我遇到的问题是我需要一个脚本来让机器人进入游戏,这需要访问我迄今为止能够避免的外部资源(机器人脚本);我更喜欢让测试尽可能保持独立。

我看到三个选项:

1)确保测试可以使用机器人脚本

2)添加无脚本加载机器人的功能

3)添加一个特殊级别指令,它将添加一个没有脚本(或者可能是内联脚本)的机器人,但只能用于测试

我不喜欢1)因为它会限制运行测试的环境(即它们需要从包含机器人脚本等外部资源的文件夹运行。)

我不喜欢2)因为我们想在生产代码中警告(并丢弃)无脚本机器人,而这个选项会让这很困难

我不喜欢3)因为我认为测试的代码应该尽可能地类似于生产代码,我不喜欢特殊的仅测试代码路径的想法。

我确信这种情况经常出现在测试中。在编写包含访问外部资源的代码的测试时,人们会做些什么,但这种访问是否与测试目的有关呢?

我们正在使用Google的测试框架; Bitfighter本身就是一个多平台的C ++项目。

1 个答案:

答案 0 :(得分:0)

我建议处理这种情况的方式是“模拟”加载机器人脚本的调用。有关模拟的更多信息,请查看here

这取决于您使用的语言和框架,但您几乎肯定会找到一些第三方库来帮助您。在.NET世界中,一些最受欢迎的是MoqRhino Mocks