我有一些与外部系统(如SQL和SVN)交互的bash脚本,我希望能够为其编写更好的单元测试。例如,针对大型生产数据库的各种类型的数据库备份和还原。
我猜有些人可能会说这是集成测试而不是单元测试(可以说你不应该依赖于外部,触摸文件系统等)。在这种情况下,创建一个模拟对象的等价物并没有真正测试 - 我想确保转储和恢复实际上可以工作。你会怎么做,你会走多远?
也许我以完全错误的方式思考这个问题 - 对于正式测试来说还是一个新手。如果是这样,你会采用什么方法?
答案 0 :(得分:1)
如果您无法创建正在运行的系统的测试版本,则需要创建数据库和存储库的测试版本。
在我们的测试系统上,我们的常规数据库处理脚本以如下内容开头:
case `hostname` in
*-test) dbname=db1-test ;;
*) dbname=db1 ;;
esac
这允许我们正常的生产SQL脚本引用正确的数据库,无论是在生产系统上运行还是在测试系统上运行(以-test结尾)。
重要的是让您的正常生产脚本自动适应测试环境。
如果您没有单独的测试系统或允许简单dbname选择的约定,那么可能使用环境变量来命名相应的数据库名称或存储库? RAIL使用RAILS_ENVIRONMENT变量执行此操作。