"""Running tests"""import sysimport timeimport warningsfrom . import resultfrom .signals import registerResult__unittest = Trueclass _WritelnDecorator(object):"""Used to decorate file-like objects with a handy 'writeln' method"""def __init__(self,stream):self.stream = streamdef __getattr__(self, attr):if attr in ('stream', '__getstate__'):raise AttributeError(attr)return getattr(self.stream,attr)def writeln(self, arg=None):if arg:self.write(arg)self.write('\n') # text-mode streams translate to \r\n if neededclass TextTestResult(result.TestResult):"""A test result class that can print formatted text results to a stream.Used by TextTestRunner."""separator1 = '=' * 70separator2 = '-' * 70def __init__(self, stream, descriptions, verbosity):super(TextTestResult, self).__init__(stream, descriptions, verbosity)self.stream = streamself.showAll = verbosity > 1self.dots = verbosity == 1self.descriptions = descriptionsdef getDescription(self, test):doc_first_line = test.shortDescription()if self.descriptions and doc_first_line:return '\n'.join((str(test), doc_first_line))else:return str(test)def startTest(self, test):super(TextTestResult, self).startTest(test)if self.showAll:self.stream.write(self.getDescription(test))self.stream.write(" ... ")self.stream.flush()def addSuccess(self, test):super(TextTestResult, self).addSuccess(test)if self.showAll:self.stream.writeln("ok")elif self.dots:self.stream.write('.')self.stream.flush()def addError(self, test, err):super(TextTestResult, self).addError(test, err)if self.showAll:self.stream.writeln("ERROR")elif self.dots:self.stream.write('E')self.stream.flush()def addFailure(self, test, err):super(TextTestResult, self).addFailure(test, err)if self.showAll:self.stream.writeln("FAIL")elif self.dots:self.stream.write('F')self.stream.flush()def addSkip(self, test, reason):super(TextTestResult, self).addSkip(test, reason)if self.showAll:self.stream.writeln("skipped {0!r}".format(reason))elif self.dots:self.stream.write("s")self.stream.flush()def addExpectedFailure(self, test, err):super(TextTestResult, self).addExpectedFailure(test, err)if self.showAll:self.stream.writeln("expected failure")elif self.dots:self.stream.write("x")self.stream.flush()def addUnexpectedSuccess(self, test):super(TextTestResult, self).addUnexpectedSuccess(test)if self.showAll:self.stream.writeln("unexpected success")elif self.dots:self.stream.write("u")self.stream.flush()def printErrors(self):if self.dots or self.showAll:self.stream.writeln()self.printErrorList('ERROR', self.errors)self.printErrorList('FAIL', self.failures)def printErrorList(self, flavour, errors):for test, err in errors:self.stream.writeln(self.separator1)self.stream.writeln("%s: %s" % (flavour,self.getDescription(test)))self.stream.writeln(self.separator2)self.stream.writeln("%s" % err)class TextTestRunner(object):"""A test runner class that displays results in textual form.It prints out the names of tests as they are run, errors as theyoccur, and a summary of the results at the end of the test run."""resultclass = TextTestResultdef __init__(self, stream=None, descriptions=True, verbosity=1,failfast=False, buffer=False, resultclass=None, warnings=None,*, tb_locals=False):"""Construct a TextTestRunner.Subclasses should accept **kwargs to ensure compatibility as theinterface changes."""if stream is None:stream = sys.stderrself.stream = _WritelnDecorator(stream)self.descriptions = descriptionsself.verbosity = verbosityself.failfast = failfastself.buffer = bufferself.tb_locals = tb_localsself.warnings = warningsif resultclass is not None:self.resultclass = resultclassdef _makeResult(self):return self.resultclass(self.stream, self.descriptions, self.verbosity)def run(self, test):"Run the given test case or test suite."result = self._makeResult()registerResult(result)result.failfast = self.failfastresult.buffer = self.bufferresult.tb_locals = self.tb_localswith warnings.catch_warnings():if self.warnings:# if self.warnings is set, use it to filter all the warningswarnings.simplefilter(self.warnings)# if the filter is 'default' or 'always', special-case the# warnings from the deprecated unittest methods to show them# no more than once per module, because they can be fairly# noisy. The -Wd and -Wa flags can be used to bypass this# only when self.warnings is None.if self.warnings in ['default', 'always']:warnings.filterwarnings('module',category=DeprecationWarning,message=r'Please use assert\w+ instead.')startTime = time.perf_counter()startTestRun = getattr(result, 'startTestRun', None)if startTestRun is not None:startTestRun()try:test(result)finally:stopTestRun = getattr(result, 'stopTestRun', None)if stopTestRun is not None:stopTestRun()stopTime = time.perf_counter()timeTaken = stopTime - startTimeresult.printErrors()if hasattr(result, 'separator2'):self.stream.writeln(result.separator2)run = result.testsRunself.stream.writeln("Ran %d test%s in %.3fs" %(run, run != 1 and "s" or "", timeTaken))self.stream.writeln()expectedFails = unexpectedSuccesses = skipped = 0try:results = map(len, (result.expectedFailures,result.unexpectedSuccesses,result.skipped))except AttributeError:passelse:expectedFails, unexpectedSuccesses, skipped = resultsinfos = []if not result.wasSuccessful():self.stream.write("FAILED")failed, errored = len(result.failures), len(result.errors)if failed:infos.append("failures=%d" % failed)if errored:infos.append("errors=%d" % errored)else:self.stream.write("OK")if skipped:infos.append("skipped=%d" % skipped)if expectedFails:infos.append("expected failures=%d" % expectedFails)if unexpectedSuccesses:infos.append("unexpected successes=%d" % unexpectedSuccesses)if infos:self.stream.writeln(" (%s)" % (", ".join(infos),))else:self.stream.write("\n")return result
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。