在shUnit2中对文件进行测试

时间:2017-07-02 10:58:11

标签: bash unit-testing shunit2

我正在使用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 ]
}

然后我可以在我的测试中存根这个功能。

有没有办法在不重构的情况下测试这段代码呢?

2 个答案:

答案 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