Test Anything Protocol in Shell scripts
Asked Answered
P

3

5

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.

Pipage answered 13/4, 2009 at 20:29 Comment(0)
H
9

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

Horsewoman answered 14/4, 2009 at 9:30 Comment(1)
I was hoping for something that ran in Bourne Shell, not just Bourne Again Shell, but it's better than nothing!Pipage
P
5
  • 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.
Piet answered 23/12, 2012 at 8:44 Comment(1)
Note that Bats doesn’t even support Zsh, which is almost Bash-compatible.Defend
P
4

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.

Principe answered 13/4, 2009 at 21:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.