Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Test Anything Protocol in Shell scripts

Has anyone seen, tried to implement, or otherwise played with TAP in shell? We're looking to create unit tests across many languages (don't get me started on why this doesn't exist so far), and since we have so much Perl code, we'll be looking at TAP (among others, I imagine). I've found a TAP library for C, Perl, of course, has it built-in, and I've even found an API for Java. But one area missing is shell script testing.

Not that I've found much on unit-testing shell scripts, either, but since we do have thousands of lines of shell code, it'd be nice to be able to test it somehow.

like image 458
Tanktalus Avatar asked Apr 13 '09 20:04

Tanktalus


3 Answers

See the list of TAP Producers for a list of libraries. On that list you will find Tap-functions for shell code.

like image 140
Chas. Owens Avatar answered Oct 14 '22 07:10

Chas. Owens


  • Bats is simple Bash only test framwork, tests could be written in a very clear syntax.
  • shUnit is the oldest shell test framework, little documentation.
  • shUnit2 is a most recently project inspired by shUnit, but completely different. Tests could be written in a more xUnit fashion. Most importantly, it is POSIX compatible.
like image 36
weynhamz Avatar answered Oct 14 '22 08:10

weynhamz


I usually write my own small test framework for my shell scripts. Some things to keep in mind when doing this:

  • When working with files, make all paths relative to some variable which you can modify in your tests.
  • diff(1) is great to verify test results (and to display a useful error message to the user)
  • Use local variables extensively
  • Everything must be in a function

That said, my "test framework" is mostly a set of shell functions (named test*) and a runTests function which calls them one by one. Nothing fancy, really. Tests create a work directory for the test, copy all necessary files into it, run a function, verify the results against a know-good set of files.

like image 29
Aaron Digulla Avatar answered Oct 14 '22 07:10

Aaron Digulla