import sys import unittest class Tracer(object): def __init__(self): self.call_calls = 0 self.line_calls = 0 def trace_func(self, frame, event, arg): if event == 'call': self.call_calls += 1 return self.trace_func elif event == 'line': self.line_calls += 1 # Should disable tracing when None is returned return None else: return self.trace_func class Test(unittest.TestCase): def test_tracing(self): def method(): _a = 1 _b = 1 _c = 1 _d = 1 tracer = Tracer() curr_trace_func = sys.gettrace() try: sys.settrace(tracer.trace_func) method() if tracer.call_calls != 1: self.fail('Expected a single call event. Found: %s' % (tracer.call_calls)) if tracer.line_calls != 1: self.fail('Expected a single line event. Found: %s' % (tracer.line_calls,)) finally: sys.settrace(curr_trace_func)