D63*_*630 7 bash shell unit-testing mocking bats-core
在OOP Universum于,有很多的信息,如何与DESGIN重构代码,使其单元测试友好.但我想知道,如何将这些原则/实践(使模拟更容易等)应用/翻译成shell脚本,这显然是不同的编程.
我必须解决一个非常庞大的代码库; 许多可执行和不可执行的过程,大型函数,大型全局状态,许多环境变量,以及通过重定向/管道和(不必要的)使用外部实用程序的任何地方(不必要的)进程间通信和文件处理.
如何重构shell代码(或在开头设计它),以便能够使用像bats和mocking-plugin这样的框架进行"良好"的自动单元测试?
小智 1
好问题!
恕我直言,shellscripts 通常只是调用其他程序来完成工作,例如cp, mv, tar, rsync, ... 即使对于表达式 bash 也使用二进制文件test,如果您使用 [ 和 ] (例如if [ -f $file ]; then; fi)。
考虑到这一点,请考虑一下bash 脚本中真正发生的事情:使用三个参数调用该程序。因此,您可以编写一个单元测试,它检查 bash 脚本是否调用所需的程序并使用正确的参数,并检查程序的返回值/退出代码。
您绝对不想将内容放入 shell 脚本的单元测试中,这是由另一个程序有效完成的(例如检查是否rsync确实将文件从机器 A 复制到机器 B)。
只是我的两分钱