我正在使用shUnit2在Bash shell脚本中进行单元测试。
我有这样的代码:
if [ ! -x /usr/local/rvm/bin/rvm ]; then
...
fi
等
我想编写单元测试来测试这段代码,但要做到这一点,我需要删除Bash文件测试的行为。
我能做到这一点的一种方法是重构为:
if ! test -x /usr/local/rvm/bin/rvm; then
...
fi
然后我可以使用类似的东西来删除内置的测试:
test() {
case "$*" in
"-x /usr/local/rvm/bin/rvm")
false
;;
esac
}
创建setUp
期间预期的文件有时可能是一种选择,但显然并非总是如此。
或者,我可以重构在自定义函数中移动文件测试,例如
rvm_installed() {
[ -x /usr/local/rvm/bin/rvm ]
}
然后我可以在我的测试中存根这个功能。
有没有办法在不重构的情况下测试这段代码呢?
答案 0 :(得分:2)
您可以存根test
,就像您可以存根[() {
case "$*" in
"-x /usr/local/rvm/bin/rvm")
false
;;
esac
}
:
$.getJSON
答案 1 :(得分:0)
@janos说的是正确的,但如果[
之类的内容被删除,则会破坏shUnit2。
我提出了一个合并的拉取请求,以@janos在评论中建议的方式修复此问题。希望最终可以在shUnit2 2.1.7中发布此修复程序。
同时选项是:
1)使用上面的修补版本。
2)另请参阅此示例中有关如何使用包装器文件的建议:https://github.com/zofrex/bourne-shell-unit-testing