• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""
2Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's
3Smalltalk testing framework (used with permission).
4
5This module contains the core framework classes that form the basis of
6specific test cases and suites (TestCase, TestSuite etc.), and also a
7text-based utility class for running the tests and reporting the results
8 (TextTestRunner).
9
10Simple usage:
11
12    import unittest
13
14    class IntegerArithmeticTestCase(unittest.TestCase):
15        def testAdd(self):  # test method names begin with 'test'
16            self.assertEqual((1 + 2), 3)
17            self.assertEqual(0 + 1, 1)
18        def testMultiply(self):
19            self.assertEqual((0 * 10), 0)
20            self.assertEqual((5 * 8), 40)
21
22    if __name__ == '__main__':
23        unittest.main()
24
25Further information is available in the bundled documentation, and from
26
27  http://docs.python.org/library/unittest.html
28
29Copyright (c) 1999-2003 Steve Purcell
30Copyright (c) 2003-2010 Python Software Foundation
31This module is free software, and you may redistribute it and/or modify
32it under the same terms as Python itself, so long as this copyright message
33and disclaimer are retained in their original form.
34
35IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
36SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF
37THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
38DAMAGE.
39
40THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT
41LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
42PARTICULAR PURPOSE.  THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS,
43AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
44SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
45"""
46
47__all__ = ['TestResult', 'TestCase', 'IsolatedAsyncioTestCase', 'TestSuite',
48           'TextTestRunner', 'TestLoader', 'FunctionTestCase', 'main',
49           'defaultTestLoader', 'SkipTest', 'skip', 'skipIf', 'skipUnless',
50           'expectedFailure', 'TextTestResult', 'installHandler',
51           'registerResult', 'removeResult', 'removeHandler',
52           'addModuleCleanup', 'doModuleCleanups', 'enterModuleContext']
53
54__unittest = True
55
56from .result import TestResult
57from .case import (addModuleCleanup, TestCase, FunctionTestCase, SkipTest, skip,
58                   skipIf, skipUnless, expectedFailure, doModuleCleanups,
59                   enterModuleContext)
60from .suite import BaseTestSuite, TestSuite
61from .loader import TestLoader, defaultTestLoader
62from .main import TestProgram, main
63from .runner import TextTestRunner, TextTestResult
64from .signals import installHandler, registerResult, removeResult, removeHandler
65# IsolatedAsyncioTestCase will be imported lazily.
66
67
68# Lazy import of IsolatedAsyncioTestCase from .async_case
69# It imports asyncio, which is relatively heavy, but most tests
70# do not need it.
71
72def __dir__():
73    return globals().keys() | {'IsolatedAsyncioTestCase'}
74
75def __getattr__(name):
76    if name == 'IsolatedAsyncioTestCase':
77        global IsolatedAsyncioTestCase
78        from .async_case import IsolatedAsyncioTestCase
79        return IsolatedAsyncioTestCase
80    raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
81