Programming/Bash/Unit Testing
< Programming | Bash
Jump to navigation
Jump to search
The UnitTesting I've found in Bash is to use Bats. Full description found at https://opensource.com/article/19/2/testing-bash-bats.
Effectively, first add Git Submodules:
git submodule add https://github.com/sstephenson/bats tests/libs/bats git submodule add https://github.com/ztombol/bats-assert tests/libs/bats-assert git submodule add https://github.com/ztombol/bats-support tests/libs/bats-support git commit
Functions
Can initialize functions that run at the start and end of every test with:
### # This will run at the start of every test. ## setup () { # Setup logic here. } ### # This will run at the end of every test. ## teardown () { # Teardown logic here. }
Create actual tests with:
@test "<name_of_test>" { # Test logic here. }
Assertion Statements
As of writing this, possible assertion statements appear to be:
# Assert success. assert <command> # Assert failure. refute <command> # Assert two values are equal. assert_equal <val_1> <val_2> # Assert function succeeds (returns 0). assert_success <function_call> # Assert function fails (returns 1). assert_failure <function_call> # Assert that a variable called ${output} matches the expected value. assert_output <expected_value> # Assert that a variable called ${output} does not match the expected value. refute_output <expected_value>
# Assert that a given line appears in "output".
ToDo: is this a variable? Or actual echo output?
assert_line <line_to_match>
# Assert that a given line does not appear in "output".
ToDo: is this a variable? Or actual echo output?
refute_line <line_to_match>
Other Assertions
It's possible to also do assertions via standard if statement syntax. Simply include the condition clause but nothing else.
Ex:
# Check if ${my_var} is equal to 5. [[ ${my_var} == 5 ]] # Check if ${my_var} does not match the string "This is a string." [[ ${my_var} != "This is a string." ]] # Check if ${some_number} is greater than 5. [[ ${some_number} > 5 ]]
If any of these checks were to fail, then the test itself would stop on the given line and return a failure.