Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - TypedDevs/testing-in-bash: Bash test framework comparison · GitHub
Skip to content

Repository files navigation

In search of the best test framework for Bash

There are many testing frameworks for Bash. However, many of them are not actively maintained, or are used only by a small group of people.

In this comparision I've included well-established and new testing frameworks that had at least recent release and have more than 50 Stars on GitHub:

  • bashunit, a fast, simple and flexible testing library for your bash scripts
  • Bats, a mature testing library with a bit of a custom syntax for more concise tests
  • shUnit2, possibly the oldest Bash test framework around, supporting test files in pure Bash
  • bash_unit, a new and featureful test framework where test cases can be written in pure Bash
  • ShellSpec, a BDD style testing framework with its own DSL
  • shpec, a BDD style testing framework similar to RSpec, Jasmine, and mocha

Test drive

To start fiddling with any of the test projects just run the install.sh to download and extract the particular testing framework to a local directory, then execute test.sh to start the suite.

Detailed comparision

bashunitBatsshUnit2bash_unitShellSpecshpec
Discover and run all tests
in the project
✔️✔️??✔️ ?✔️
Run subset of tests or
a specific test
✔️✔️ ??✔️✔️issue
Parallel test execution✔️✔️
Skip or ignore tests✔️✔️?✔️ ?✔️issue
Rich assertion library✔️???✔️ ?✔️ ?
Extensible with custom assertions✔️✔️ ?✔️ ?✔️ ?✔️ ?✔️ ?
Before / After✔️✔️issue✔️✔️issue
BeforeAll / AfterAll✔️issueissue✔️✔️ ?issue
Parameterized tests
and test data
✔️issue✔️
Mocking *issue✔️ ??✔️ ?✔️ ?✔️ ?
Isolation between tests **✔️✔️ doc✔️✔️
Nice local report✔️?✔️✔️✔️✔️
CI compatible report✔️ TAPissue✔️ TAP✔️ TAP
Zero Dependency and
implemented in Bash ***
✔️✔️✔️✔️✔️✔️
Easy to install ****✔️✔️✔️✔️✔️✔️
Tests written in Bash✔️almost✔️✔️??
Compatible with the
Unofficial Bash Strict Mode *****
✔️?✔️issue✔️
Maintained✔️??✔️ ?✔️ ??
Maturesince 2023✔️ since 2011✔️ since 2007✔️ since 2016since 2019✔️ since 2013
Good documentation✔️ ??✔️ ?✔️ ?✔️ ?✔️ ?

* Mocking:
The testing framework is compatible with the common mocking techniques.

** Isolation between tests:
Aliases, custom function definitions, Bash options and variables are not leaking from one test to another.

*** Zero Dependency and implemented in Bash:
Apart from a few common tools like coreutils and grep, you don't need anything to use the framework.
The source code of the framework is itself implemented as Bash scripts. If you are comfortable with Bash, you can read and even modify it.

**** Easy to install:
Many of the frameworks support more than one alternatives on how to set it up quickly. It's possible to install it with your favourite package manager and some of them even have an official Docker image. Personally, I try to avoid installing project dependencies globally as much as I can, so I just decided to grab a tar.gz file with the latest release from GitHub.

***** Compatible with the Unofficial Bash Strict Mode:
Sourcing a script file that use the Unofficial Bash Strict Mode should not break the test framework. Of course, custom assertions and the test code should also work with strict mode but that's up for the user. Also, the test framework shouldn't set Bash options as well to ensure that executing sourced functions work similarly to when they are not sourced.

Related posts, other comparisions

Contribution guide

If you know a testing framework that should be mentioned here or find that there's room for improvement feel free to open an issue or Pull Request. (See CONTRIBUTING.md.)

About

Bash test framework comparison

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages