A useful way to organise a test suite is to split it into a set of files: one for each module to be tested.
The file libmbfl-tests.bash must be sourced at the beginning of each test file. This means
that the variables that you set may interfere with the ones in the library; this should not happen
because the test library prefixes variable names with mbfl_
or dotest_
, but one
exception is TMPDIR
: do not set it in your script, use dotest-echo-tmpdir()
to access
that value. Handling files in tests.
To understand how the library works lets examine a bare bones example. The function dotest
should be invoked at the end of each module in the test suite; each module should define functions
starting with the same prefix. A module should be stored in a file, and should look like the
following:
# mymodule.test -- source libmbfl-tests.sh source module.sh function module-featureA-1.1 () { ... } function module-featureA-1.2 () { ... } function module-featureA-2.1 () { ... } function module-featureB-1.1 () { ... } function module-featureB-1.2 () { ... } dotest module- dotest-final-report ### end of file
the file should be executed with:
$ bash mymodule.test
To test just "feature A":
$ TESTMATCH=module-featureA bash mymodule.test
Remember that the source
builtin will look for files in the
directories selected by the PATH
environment variables, so we may
want to do:
$ PATH=path/to/modules:${PATH} TESTMATCH=module-featureA bash mymodule.test
It is better to put such stuff in a Makefile, with GNU Make:
srcdir = ... builddir = ... BASH_PROGRAM = bash MODULES = moduleA moduleB testdir = $(srcdir)/tests test_FILES = $(foreach f,$(MODULES),$(testdir)/$(f).test) test_ENV = PATH=$(builddir):$(testdir):$(PATH) \ TESTMATCH=$(TESTMATCH) test_CMD = $(test_ENV) $(BASH_PROGRAM) .PHONY: test-modules test-modules: @$(foreach f,$(test_FILES),$(test_CMD) $(f);)
This document describes version 3.0.0-devel.9 of Marcos Bash Functions Library.