Overview
Teaching: 5 min
Exercises: 5 minQuestions
What happens with assertions in python?
Objectives
Understand how assertions in python correspond to exit codes
Figure out how pytest fits in
This is a relatively short section, but we need to connect some things you’ve learned from testing in python with exit codes.
Assert Your Tests
Recall in the previous session, you made a test_mean.py that asserted lots of statements. For example assert obs == exp. What happens when an assertion fails in python? An exception is raised, AssertionError. The nice thing about python is that all unhandled exceptions return a non-zero exit code. If an exit code is not set, this defaults to 1. Let’s just quickly do a sanity check with python -c which allows for executing arbitrary python commands.
> python -c "assert True"
> echo $?
0
> python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
> echo $?
1
Ignoring what would cause the assertion to be True or False, we can see that assertions automatically indicate failure in a script.
What about pytest?
Pytest, thankfully, handles these assertion failures intuitively. That is, running pytest test_mean.py will produce an expected exit code depending on whether the test passed or failed. To try this out quickly, go ahead and create a file called test_assert.py with the following:
def test_assert_success():
assert True
def test_assert_failure():
assert False
and then running pytest test_assert.py followed up with echo $?, you should be able to confirm that the exit codes are useful here.
Key Points
You can do whatever you like in a test, as long as you return the right exit code
Pytest, and other test utilities, will propagate the exit codes correctly