Merge pull request #5634 from blueyed/fix-unittest-exit
unittest: handle outcomes.Exit
This commit is contained in:
commit
693e9d0733
|
@ -0,0 +1 @@
|
|||
``pytest.exit`` and ``bdb.BdbQuit`` are now correctly handled in ``unittest`` cases.
|
|
@ -6,6 +6,7 @@ import _pytest._code
|
|||
import pytest
|
||||
from _pytest.compat import getimfunc
|
||||
from _pytest.config import hookimpl
|
||||
from _pytest.outcomes import exit
|
||||
from _pytest.outcomes import fail
|
||||
from _pytest.outcomes import skip
|
||||
from _pytest.outcomes import xfail
|
||||
|
@ -153,6 +154,11 @@ class TestCaseFunction(Function):
|
|||
self.__dict__.setdefault("_excinfo", []).append(excinfo)
|
||||
|
||||
def addError(self, testcase, rawexcinfo):
|
||||
try:
|
||||
if isinstance(rawexcinfo[1], exit.Exception):
|
||||
exit(rawexcinfo[1].msg)
|
||||
except TypeError:
|
||||
pass
|
||||
self._addexcinfo(rawexcinfo)
|
||||
|
||||
def addFailure(self, testcase, rawexcinfo):
|
||||
|
|
|
@ -1050,3 +1050,39 @@ def test_setup_inheritance_skipping(testdir, test_name, expected_outcome):
|
|||
testdir.copy_example("unittest/{}".format(test_name))
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines(["* {} in *".format(expected_outcome)])
|
||||
|
||||
|
||||
def test_BdbQuit(testdir):
|
||||
testdir.makepyfile(
|
||||
test_foo="""
|
||||
import unittest
|
||||
|
||||
class MyTestCase(unittest.TestCase):
|
||||
def test_bdbquit(self):
|
||||
import bdb
|
||||
raise bdb.BdbQuit()
|
||||
|
||||
def test_should_not_run(self):
|
||||
pass
|
||||
"""
|
||||
)
|
||||
reprec = testdir.inline_run()
|
||||
reprec.assertoutcome(failed=1, passed=1)
|
||||
|
||||
|
||||
def test_exit_outcome(testdir):
|
||||
testdir.makepyfile(
|
||||
test_foo="""
|
||||
import pytest
|
||||
import unittest
|
||||
|
||||
class MyTestCase(unittest.TestCase):
|
||||
def test_exit_outcome(self):
|
||||
pytest.exit("pytest_exit called")
|
||||
|
||||
def test_should_not_run(self):
|
||||
pass
|
||||
"""
|
||||
)
|
||||
result = testdir.runpytest()
|
||||
result.stdout.fnmatch_lines("*Exit: pytest_exit called*")
|
||||
|
|
Loading…
Reference in New Issue