测试一个bash shell脚本

16

有人可以解释一下如何测试一个bash shell脚本吗?

比如说,我有一个包含以下代码的.sh文件...

#!/bin/sh

for file in *.txt; do
    mv "$file" "`basename $file .txt`.doc"
done

我该如何编写测试?就像在Java中一样,你可以编写类似于assertEquals的代码来测试代码是否产生所需的输出。


请查看以下与测试驱动开发有关的网页链接:https://dev59.com/a3M_5IYBdhLWcg3wlEPO 和 https://dev59.com/onM_5IYBdhLWcg3wiDqA。 - Chaitanya
单元测试的bash脚本。不错。 :) - Noufal Ibrahim
这个更好:mv "$file" "$(basename "$file" .txt).doc" 或者 mv "$file" "${file%*.txt}.doc" - Dennis Williamson
3个回答

17

试着用这个:assert.sh

source "./assert.sh"

local expected actual
expected="Hello"
actual="World!"
assert_eq "$expected" "$actual" "not equivalent!"
# => x Hello == World :: not equivalent! 

11

3
请不要将ABS作为参考,通常它没有得到很好的维护,并且经常展示不良实践的例子。Wooledge Wiki和Bash Hackers Wiki(当然还有官方手册)是*更好的资源。 - Charles Duffy
4
@CharlesDuffy的建议通常是不错的,但在这种情况下并不太有帮助,因为你没有指出替代方案,而ABS至少提供了一个断言脚本,而Wooledge wiki(https://mywiki.wooledge.org/FindPage?action=fullsearch&advancedsearch=1&and_terms=assert&or_terms=&not_terms=&mtime=&categories=&language=&mimetype=)和Bash Hackers Wiki(https://wiki-dev.bash-hackers.org/start?do=search&id=assert)都没有对断言进行任何讨论。 - Kevin Whitefoot

4
我建议在mv前面添加echo,以验证是否创建了正确的命令(对于可能难以撤销的更改始终是个好主意)。
一些可能有用的资源:

好的,谢谢。但是我正在尝试创建一个.sh文件来测试整个代码。 - Mr Teeth
@Mr Teeth:上面添加了一些链接。话虽如此,由于几乎所有的东西都归结为调用外部命令,因此编写shell脚本的单元测试会更加困难。结果,通过使用“echo”来存根化外部修改,测试这些命令并测试脚本本身可能更加明智和有用。 - geekosaur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接