Bash和测试驱动的开发
当在bash中编写一个琐碎的脚本时,我经常想知道如何使代码可测试。
通常很难为bash代码编写测试,因为它对于取值和返回值的函数是低的,对于在环境中检查和设置某些方面的函数,修改文件系统,调用程序等 – 依赖于环境或具有副作用的功能。因此,安装和测试代码变得比他们测试的代码复杂得多。 例如,考虑一个简单的函数测试: function add_to_file() { local f=$1 cat >> $f sort -u $f -o $f } 此函数的测试代码可能包括: add_to_file.before: foo bar baz add_to_file.after: bar baz foo qux 和测试代码: function test_add_to_file() { cp add_to_file.{before,tmp} add_to_file add_to_file.tmp cmp add_to_file.{tmp,after} && echo pass || echo fail rm add_to_file.tmp } 这里5行代码由6行测试代码和7行数据测试。 现在考虑一个稍微更复杂的情况: function distribute() { local file=$1 ; shift local hosts=( "$@" ) for host in "${hosts[@]}" ; do rsync -ae ssh $file $host:$file done } 我甚至不能说如何开始写一个测试… 所以,有没有一个好的方法来做bash脚本中的TDD,或者我应该放弃,把我的努力在其他地方?
所以这里是我学到了:
>有一些testing frameworks写在bash和bash, Meta:我决定回答(并接受)我自己的问题,因为我无法在Sinan ünür’s(投票)和mouviciel’s(投票)之间做出选择,同样有用和有见地。我想注意Stefano Borini’s的答案,虽然不是最初我印象深刻,我学会了欣赏它随着时间的推移。他上面提到的他的design patterns or best practices for shell scripts answer(投票)是有用的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |