BATS测试脚手架Skill bats-test-scaffolder

BATS测试脚手架是一个用于自动化生成BATS测试框架的工具,专门为Shell脚本提供单元测试和集成测试支持。它能够快速创建测试文件、设置和清理夹具、实现自定义断言、配置模拟助手,并确保测试隔离,适用于Shell脚本开发、CLI工具测试和跨平台兼容性验证。关键词:BATS测试、Shell脚本测试、自动化测试框架、单元测试、集成测试、测试脚手架、CLI测试、模拟测试、测试夹具。

测试 0 次安装 0 次浏览 更新于 2/23/2026

name: bats-test-scaffolder description: 为Shell脚本测试生成BATS测试结构及夹具,包括设置/清理、断言和模拟功能。 allowed-tools: 读取、写入、编辑、Bash、Glob、Grep

BATS测试脚手架

为Shell脚本测试生成BATS测试结构。

功能

  • 生成BATS测试文件
  • 创建设置和清理夹具
  • 实现自定义断言
  • 设置模拟助手
  • 配置测试隔离
  • 生成测试助手

使用场景

当您需要时调用此技能:

  • 为Shell脚本设置BATS测试
  • 创建测试夹具和助手
  • 实现模拟函数
  • 生成测试用例

生成的测试结构

tests/
├── bats/
│   └── bats-*.bash        # BATS子模块
├── test_helper/
│   ├── common-setup.bash  # 通用设置
│   └── mocks.bash         # 模拟助手
├── fixtures/
│   ├── input.txt          # 测试夹具
│   └── expected.txt
└── *.bats                  # 测试文件

测试文件模板

#!/usr/bin/env bats

# 加载测试助手
load 'test_helper/common-setup'

# 每个测试前运行的设置
setup() {
    common_setup
    # 测试特定设置
    export TEST_DIR="$(mktemp -d)"
}

# 每个测试后运行的清理
teardown() {
    # 清理
    rm -rf "${TEST_DIR}"
}

@test "脚本使用--help显示帮助信息" {
    run ./script.sh --help

    assert_success
    assert_output --partial "用法:"
}

@test "脚本缺少必需参数时失败" {
    run ./script.sh

    assert_failure
    assert_output --partial "缺少必需参数"
}

@test "脚本处理输入文件" {
    cp fixtures/input.txt "${TEST_DIR}/"

    run ./script.sh "${TEST_DIR}/input.txt"

    assert_success
    assert_output --partial "处理完成"
}

@test "脚本创建输出文件" {
    run ./script.sh -o "${TEST_DIR}/output.txt" fixtures/input.txt

    assert_success
    assert_file_exists "${TEST_DIR}/output.txt"
}

@test "脚本处理文件名中的特殊字符" {
    local special_file="${TEST_DIR}/file with spaces.txt"
    echo "test" > "${special_file}"

    run ./script.sh "${special_file}"

    assert_success
}

测试助手 (test_helper/common-setup.bash)

#!/usr/bin/env bash

# 加载BATS支持库
load 'bats/bats-support/load'
load 'bats/bats-assert/load'
load 'bats/bats-file/load'

# 所有测试的通用设置
common_setup() {
    # 获取包含目录
    PROJECT_ROOT="$(cd "$(dirname "$BATS_TEST_FILENAME")/.." && pwd)"

    # 将脚本添加到PATH
    PATH="${PROJECT_ROOT}/bin:${PATH}"

    # 设置测试临时目录
    TEST_TEMP_DIR="$(mktemp -d)"
}

# 通用清理
common_teardown() {
    rm -rf "${TEST_TEMP_DIR}"
}

# 自定义断言:检查退出代码
assert_exit_code() {
    local expected="$1"
    if [[ "${status}" -ne "${expected}" ]]; then
        echo "预期退出代码 ${expected},实际为 ${status}" >&2
        return 1
    fi
}

# 模拟命令
mock_command() {
    local cmd="$1"
    local response="$2"

    eval "${cmd}() { echo '${response}'; }"
    export -f "${cmd}"
}

目标流程

  • shell脚本开发
  • CLI单元集成测试
  • 跨平台CLI兼容性