Captured `SystemExit` with pytest and tox
I wanted to unit test some Python code that uses sys.exit(exit_code)
to verify whether the exit_code
was as expected. The first answer I came across suggests using the built in capsys
fixture which is enabled with setting --capture=sys
when running pytest
. However for me this clashed with my tox.ini
:
I take advantage of the {posargs}
feature by sometimes running tox
with arguments for pytest
, for example tox -e py27 -- --capture=no
in order to stop pytest
from capturing stdout
. Using the --capture=sys
method in my tox.ini
as mentioned above did not seem to play well with optionally using --capture=no
when invoking pytest
through tox
.
A better solution is to capture the exception rather than using capsys
. This avoids the need to use the --capture=sys
option at all: