1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- """
- Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's
- Smalltalk testing framework (used with permission).
- This module contains the core framework classes that form the basis of
- specific test cases and suites (TestCase, TestSuite etc.), and also a
- text-based utility class for running the tests and reporting the results
- (TextTestRunner).
- Simple usage:
- import unittest
- class IntegerArithmeticTestCase(unittest.TestCase):
- def testAdd(self): # test method names begin with 'test'
- self.assertEqual((1 + 2), 3)
- self.assertEqual(0 + 1, 1)
- def testMultiply(self):
- self.assertEqual((0 * 10), 0)
- self.assertEqual((5 * 8), 40)
- if __name__ == '__main__':
- unittest.main()
- Further information is available in the bundled documentation, and from
- http://docs.python.org/library/unittest.html
- Copyright (c) 1999-2003 Steve Purcell
- Copyright (c) 2003-2010 Python Software Foundation
- This module is free software, and you may redistribute it and/or modify
- it under the same terms as Python itself, so long as this copyright message
- and disclaimer are retained in their original form.
- IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
- SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
- THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGE.
- THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
- AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
- SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- """
- __all__ = ['TestResult', 'TestCase', 'IsolatedAsyncioTestCase', 'TestSuite',
- 'TextTestRunner', 'TestLoader', 'FunctionTestCase', 'main',
- 'defaultTestLoader', 'SkipTest', 'skip', 'skipIf', 'skipUnless',
- 'expectedFailure', 'TextTestResult', 'installHandler',
- 'registerResult', 'removeResult', 'removeHandler',
- 'addModuleCleanup']
- # Expose obsolete functions for backwards compatibility
- __all__.extend(['getTestCaseNames', 'makeSuite', 'findTestCases'])
- __unittest = True
- from .result import TestResult
- from .case import (addModuleCleanup, TestCase, FunctionTestCase, SkipTest, skip,
- skipIf, skipUnless, expectedFailure)
- from .suite import BaseTestSuite, TestSuite
- from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames,
- findTestCases)
- from .main import TestProgram, main
- from .runner import TextTestRunner, TextTestResult
- from .signals import installHandler, registerResult, removeResult, removeHandler
- # IsolatedAsyncioTestCase will be imported lazily.
- # deprecated
- _TextTestResult = TextTestResult
- # There are no tests here, so don't try to run anything discovered from
- # introspecting the symbols (e.g. FunctionTestCase). Instead, all our
- # tests come from within unittest.test.
- def load_tests(loader, tests, pattern):
- import os.path
- # top level directory cached on loader instance
- this_dir = os.path.dirname(__file__)
- return loader.discover(start_dir=this_dir, pattern=pattern)
- # Lazy import of IsolatedAsyncioTestCase from .async_case
- # It imports asyncio, which is relatively heavy, but most tests
- # do not need it.
- def __dir__():
- return globals().keys() | {'IsolatedAsyncioTestCase'}
- def __getattr__(name):
- if name == 'IsolatedAsyncioTestCase':
- global IsolatedAsyncioTestCase
- from .async_case import IsolatedAsyncioTestCase
- return IsolatedAsyncioTestCase
- raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|