'Run a single method, either a test method or fixture.
@param suppress: Any warnings to suppress, as defined by the C{suppress}
attribute on this method, test case, or the module it is defined in.
@param todo: Any expected failure or failures, as defined by the C{todo}
attribute on this method, test case, or the module it is defined in.
@param method: The method to run.
@param result: The TestResult instance to which to report results.
@return: C{True} if the method fails and no further method/fixture calls
should be made, C{False} otherwise.'

def _run(self, suppress, todo, method, result):

    if inspect.isgeneratorfunction(method):
        exc = TypeError(('%r    is    a    generator    function    and    therefore    will    never    run' % (method,)))
        result.addError(self, failure.Failure(exc))
        return True
    try:
        runWithWarningsSuppressed(suppress, method)
    except SkipTest as e:
        result.addSkip(self, self._getSkipReason(method, e))
    except:
        reason = failure.Failure()
        if ((todo is None) or (not todo.expected(reason))):
            if reason.check(self.failureException):
                addResult = result.addFailure
            else:
                addResult = result.addError
            addResult(self, reason)
        else:
            result.addExpectedFailure(self, reason, todo)
    else:
        return False
    return True
