Bash and Test-Driven Development

So here is what I learned:

  1. There are some testing frameworks written in bash and for bash,
    however…

  2. It is not so much that Bash is not suitable for TDD (although some
    other languages come to mind that are a better fit), but the
    typical tasks that Bash is used for (Installation, System
    configuration), that are hard to write tests for, and in
    particularly hard to setup the test.

  3. The poor data structure support in Bash makes it hard to separate
    logic from side-effect, and indeed there is typically little logic
    in Bash scripts. That makes it hard to break scripts into
    testable chunks. There are some functions that can be tested, but
    that is the exception, not the rule.

  4. Function are a good thing ™, but they can only go so far.

  5. Nested functions can be even better, but they are also limited.

  6. At the end of the day, with major effort some coverage can be
    obtained, but it will test the less interesting part of the code,
    and will keep the bulk of the testing as a good (or bad) old manual
    testing.

Meta: I decided to answer (and accept) my own question, because I was unable to choose between Sinan Ünür’s (voted up) and mouviciel’s (voted up) answers that where equally useful and insightful. I want to note Stefano Borini’s answer, that although not impressed me initially, I learned to appreciate it over time. Also his design patterns or best practices for shell scripts answer (voted up) referred above was useful.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)