class TodoCase(unittest.TestCase): def __init__(self, methodName='runTest'): """ Create an instance of the class that will use the named test method when executed. Raises a ValueError if the instance does not have a method with the specified name. """ unittest.TestCase.__init__(self, methodName) try: self.__testMethodName = methodName testMethod = getattr(self, methodName) self.__testMethodDoc = testMethod.__doc__ except AttributeError: raise ValueError, "no such test method in %s: %s" % \ (self.__class__, methodName) def shortDescription(self): """Returns a one-line description of the test, or None if no description has been provided. The default implementation of this method returns the first line of the specified test method's docstring. """ doc = self.__testMethodDoc return doc and doc.split("\n")[0].strip() or None def __str__(self): return "%s (%s)" % (self.__testMethodName, _strclass(self.__class__)) def __repr__(self): return "<%s testMethod=%s>" % \ (_strclass(self.__class__), self.__testMethodName) def __exc_info(self): """Return a version of sys.exc_info() with the traceback frame minimised; usually the top level of the traceback frame is not needed. """ exctype, excvalue, tb = sys.exc_info() if sys.platform[:4] == 'java': ## tracebacks look different in Jython return (exctype, excvalue, tb) return (exctype, excvalue, tb) def run(self, result): result.startTest(self) testMethod = getattr(self, self.__testMethodName) try: try: self.setUp() except KeyboardInterrupt: raise except: result.addError(self, self.__exc_info()) return ok = False try: testMethod() ok = True except Todo_Failed: result.addTodoFailed(self, self.__exc_info()) except Todo_Passed: result.addTodoPassed(self, self.__exc_info()) except self.failureException: result.addFailure(self, self.__exc_info()) except KeyboardInterrupt: raise except: result.addError(self, self.__exc_info()) try: self.tearDown() except KeyboardInterrupt: raise except: result.addError(self, self.__exc_info()) ok = False if ok: result.addSuccess(self) finally: result.stopTest(self)