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