这些年来,我开发的几乎所有产品都涉及到一定级别的shell脚本(或Windows上的批处理文件、PowerShell等).尽管我们在java或C++中编写了大部分代码,但似乎总是有一些集成或安装任务更好地用shell脚本完成.

因此,shell脚本将成为附带代码的一部分,因此需要像编译代码一样进行测试.有没有人对现有的一些shell脚本单元测试框架有经验,比如shunit2?目前我主要对Linux shell脚本感兴趣;我想知道测试工具在多大程度上复制了其他xUnit框架的功能和易用性,以及与CruiseControl或Hudson等连续构建系统集成有多容易.

推荐答案

更新2019-03-01:我现在的偏好是bats.我已经在小项目上使用了几年.我喜欢简洁明了的语法.我没有将它与CI/CD框架集成,但它的退出状态确实反映了套件的整体成功/失败,这比下面描述的shunit2要好.


先前的答案:

在Linux环境中,我使用shunit2来编写与Java/Ruby web应用程序相关的shell脚本.它易于使用,与其他xUnit框架没有太大区别.

我没有try 过与CruiseControl或Hudson/Jenkins集成,但在通过其他方式实现持续集成时,我遇到了以下问题:

  • 退出状态:当测试套件失败时,shunit2不使用非零退出状态来传达失败.因此,您要么必须解析shunit2输出以确定套件的通过/失败,要么将shunit2更改为一些持续集成框架所期望的行为,通过退出状态来传递通过/失败.
  • XML日志(log):shunit2不会生成JUnit风格的结果XML日志(log).

Linux相关问答推荐

使用信号处理程序实现Hibernate 功能

在新环境中使用Unicode范围的sed表达式有问题

pci_user_write_config_word在哪里实现?

Docker运行错误:exec/app/backend/server:没有这样的文件或目录

将十六进制文件名转换为十进制

如何使用 sed 和 date 命令替换和格式化字符串中的日期?

如何过滤 Bash 的正则表达式(Linux)中的所有值,除了一个?

在 Ubuntu 中,如何设置 Tomcat 9 以使用 Java 17?

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

在 Ansible 中使用 JSON 查询过滤数据以从 ansible_fact 中提取数据

问题:Virtio rpmsg 总线 virtio0:收到的 msg 没有收件人 - 在 Yocto Hardknott - imx7d-pico

使用带有 gnome-keyring 的 Git 凭证助手作为 Sudo 时出错

全屏(Fullscreen)小部件

是否可以使用 shell 脚本递归地创建文件夹?

如何使用 AWK 合并两个文件?

是否可以在 Linux x86 GAS 程序集中创建没有系统调用的线程?

如何告诉 CMake 将构建文件放在哪里?

在 Linux 上忽略 glob() 中的大小写

如何自动化 HTML 到 PDF 的转换?

在linux中将制表符分隔的文件转换为csv的最快方法