shUnit2 中的存根文件测试

Stubbing file tests in 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 ]
}

然后我可以在我的测试中存根这个函数。

有没有什么方法可以在不重构的情况下测试这段代码?

您可以存根 [ 就像您可以存根 test:

[() {
  case "$*" in
  "-x /usr/local/rvm/bin/rvm")
    false
    ;;
  esac
}

@janos 所说的是正确的,但如果像 [ 这样的东西被存根,它会破坏 shUnit2。

我提出了一个拉取请求,该请求被合并以按照@janos 在评论中建议的方式解决这个问题。希望最终在 shUnit2 2.1.7 中发布此修复程序。

同时选项为:

1) 使用上面的补丁版本。

2) 另请参阅有关如何在此示例中使用包装文件的建议:https://github.com/zofrex/bourne-shell-unit-testing