Skip to content

Commit cb24b74

Browse files
committed
Disable unittest tearDowns and cleanups for post mortem debugging
closes #9
1 parent 043732a commit cb24b74

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

pytest_pudb.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import pudb
44
import sys
55
import warnings
6+
import _pytest.unittest
67

78

89
def pytest_addoption(parser):
@@ -26,6 +27,7 @@ def __init__(self, config):
2627
self.config = config
2728
self.pluginmanager = config.pluginmanager
2829
self._pudb_get_debugger = None
30+
self._test_case_function_runtest = None
2931

3032
@property
3133
def with_pudb_option(self):
@@ -38,11 +40,25 @@ def mount(self):
3840
if self.with_pudb_option:
3941
self.config.pluginmanager.register(self, 'pudb_wrapper')
4042

43+
def runtest(self):
44+
# disables tearDown and cleanups for post mortem debugging
45+
# see: https://github.com/pytest-dev/pytest/pull/1890
46+
if self._handle_skip():
47+
return
48+
self._testcase.debug()
49+
50+
self._test_case_function_runtest = _pytest.unittest.TestCaseFunction.runtest
51+
_pytest.unittest.TestCaseFunction.runtest = runtest
52+
4153
def unmount(self):
4254
if self._pudb_get_debugger:
4355
pudb._get_debugger = self._pudb_get_debugger
4456
self._pudb_get_debugger = None
4557

58+
if self._test_case_function_runtest:
59+
_pytest.unittest.TestCaseFunction.runtest = self._test_case_function_runtest
60+
self._test_case_function_runtest = None
61+
4662
def disable_io_capture(self):
4763
if self.pluginmanager is not None:
4864
capman = self.pluginmanager.getplugin("capturemanager")

test_pytest_pudb.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,29 @@ def test_1():
1818
child.sendeof()
1919

2020

21+
def test_pudb_unittest_teardown_interaction(testdir):
22+
p1 = testdir.makepyfile("""
23+
import unittest
24+
class Blub(unittest.TestCase):
25+
def tearDown(self):
26+
self.a = False
27+
def test_false(self):
28+
self.a = True
29+
self.fail()
30+
""")
31+
child = testdir.spawn_pytest("--pudb %s" % p1)
32+
child.expect("PuDB")
33+
child.expect(HELP_MESSAGE)
34+
child.expect("PROCESSING EXCEPTION")
35+
child.expect(VARIABLES_TABLE)
36+
child.expect('self')
37+
child.send('V') # Move to variables
38+
child.send('n') # Add watch expression
39+
child.expect('Add Watch Expression')
40+
child.sendline('self.a') # Set self.a
41+
child.expect('self.a: \x1b\\[0;30;42mTrue')
42+
child.sendeof()
43+
2144
def test_pudb_set_trace_integration(testdir):
2245
p1 = testdir.makepyfile("""
2346
def test_1():

0 commit comments

Comments
 (0)