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