Unit testing 测试与外部系统的交互
我有一些与外部系统交互的bash脚本,比如SQL和SVN,我希望能够为它们编写更好的单元测试。例如,针对大型生产数据库的各种类型的数据库备份和恢复 我猜有些人可能会说这是集成测试,而不是单元测试(可以说,在单元测试中,您不应该依赖外部,而应该接触文件系统等)。在这种情况下,创建模拟对象的等价物并不会真正进行太多测试——我希望确保转储和恢复能够实际工作。你会怎么做,你会走多远Unit testing 测试与外部系统的交互,unit-testing,bash,integration-testing,Unit Testing,Bash,Integration Testing,我有一些与外部系统交互的bash脚本,比如SQL和SVN,我希望能够为它们编写更好的单元测试。例如,针对大型生产数据库的各种类型的数据库备份和恢复 我猜有些人可能会说这是集成测试,而不是单元测试(可以说,在单元测试中,您不应该依赖外部,而应该接触文件系统等)。在这种情况下,创建模拟对象的等价物并不会真正进行太多测试——我希望确保转储和恢复能够实际工作。你会怎么做,你会走多远 仅转储架构,本地还原,然后在安装程序中插入测试数据 您会通过比较文件大小、检查gzip文件类型等来测试归档功能吗 对于这
- 仅转储架构,本地还原,然后在安装程序中插入测试数据
- 您会通过比较文件大小、检查gzip文件类型等来测试归档功能吗
- 对于这种长时间运行的任务,您将如何测试时间问题?也许保留一个完整的快照以便在本地进行测试
- 您是否还会为SVN和其他此类依赖项创建本地测试存储库
也许我对这一点的想法是完全错误的——对正式测试来说是全新的。如果是,您将使用什么方法?如果无法创建运行系统的测试版本,则需要创建数据库和存储库的测试版本 在我们的测试系统上,我们的正常数据库处理脚本从以下内容开始:
case `hostname` in
*-test) dbname=db1-test ;;
*) dbname=db1 ;;
esac
这允许我们的正常生产SQL脚本引用正确的数据库,无论是在生产系统上还是在测试系统上运行(一个以-test结尾)
重要的是让您的正常生产脚本自动适应测试环境
如果没有单独的测试系统,或者没有允许简单dbname选择的约定,那么可以使用环境变量来命名适当的数据库名或respository?RAILs使用RAILs_环境变量来实现这一点。如果无法创建运行系统的测试版本,则需要创建数据库和存储库的测试版本 在我们的测试系统上,我们的正常数据库处理脚本从以下内容开始:
case `hostname` in
*-test) dbname=db1-test ;;
*) dbname=db1 ;;
esac
这允许我们的正常生产SQL脚本引用正确的数据库,无论是在生产系统上还是在测试系统上运行(一个以-test结尾)
重要的是让您的正常生产脚本自动适应测试环境
如果没有单独的测试系统,或者没有允许简单dbname选择的约定,那么可以使用环境变量来命名适当的数据库名或respository?RAILs通过RAILs\u环境变量实现这一点