测试与外部系统的交互

时间:2010-12-30 09:34:57

标签: unit-testing bash integration-testing

我有一些与外部系统(如SQL和SVN)交互的bash脚本,我希望能够为其编写更好的单元测试。例如,针对大型生产数据库的各种类型的数据库备份和还原。

我猜有些人可能会说这是集成测试而不是单元测试(可以说你不应该依赖于外部,触摸文件系统等)。在这种情况下,创建一个模拟对象的等价物并没有真正测试 - 我想确保转储和恢复实际上可以工作。你会怎么做,你会走多远?

  • 仅转储架构,在本地还原,然后在设置中插入测试数据?
  • 您是否会通过比较文件大小,检查gzip文件类型等来测试存档功能?
  • 您如何测试这些长时间运行的任务的时间问题?也许保留一个完整的快照以便在本地进行测试?
  • 您是否还要为SVN和其他此类依赖项创建本地测试存储库?

也许我以完全错误的方式思考这个问题 - 对于正式测试来说还是一个新手。如果是这样,你会采用什么方法?

1 个答案:

答案 0 :(得分:1)

如果您无法创建正在运行的系统的测试版本,则需要创建数据库和存储库的测试版本。

在我们的测试系统上,我们的常规数据库处理脚本以如下内容开头:

case `hostname` in
 *-test) dbname=db1-test ;;
 *)      dbname=db1 ;;
esac

这允许我们正常的生产SQL脚本引用正确的数据库,无论是在生产系统上运行还是在测试系统上运行(以-test结尾)。

重要的是让您的正常生产脚本自动适应测试环境。

如果您没有单独的测试系统或允许简单dbname选择的约定,那么可能使用环境变量来命名相应的数据库名称或存储库? RAIL使用RAILS_ENVIRONMENT变量执行此操作。