Skip to content

TypedDevs/bashunit

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Tests Static analysis Editorconfig checker Coverage MIT Software License


bashunit

A simple testing framework for bash scripts

Test your bash scripts in the fastest and simplest way.

Why bashunit

A lightweight, fast testing framework for Bash 3.0+, focused on developer experience. It ships hundreds of assertions plus spies, mocks, data providers, snapshots and more.

Quick start

Install the latest version into your project:

curl -s https://bashunit.com/install.sh | bash

Write a test in tests/example_test.sh:

#!/usr/bin/env bash

function test_bashunit_is_working() {
  assert_same "bashunit is working" "bashunit is working"
}

Run it:

./lib/bashunit tests/

Prefer learning by doing? Run ./lib/bashunit learn for an interactive tutorial.

Assertions at a glance

bashunit ships ~60 assertions across many families. One representative example per family (full catalog and signatures at bashunit.com/assertions):

Family Example
Equality & truth assert_equals "foo" "$actual"
Strings assert_string_starts_with "Hello" "$greeting"
Exit codes assert_exit_code "1" (checks $? of the previous command)
Numeric assert_greater_than "1" "$count"
Arrays assert_array_length 3 "${my_array[@]}"
Files & dirs assert_file_permissions 644 "$file"
JSON (needs jq) assert_json_contains ".name" "bashunit" "$json"
Dates assert_date_before "2026-01-01" "$date"
Duration assert_duration_less_than "echo hello" 500
Snapshots assert_match_snapshot "$(my_cmd)"
Test doubles assert_have_been_called_times 2 my_fn

Documentation

Full documentation, covering installation options, every feature and examples, lives at bashunit.com.

Contribute

Issues, ideas and pull requests are welcome. See the contribution guide to set up your environment.

Sponsor this project

Contributors

Languages