python unit test async,unittest

Instances of the TestCase class represent the logical test units

in the unittest universe. This class is intended to be used as a base

class, with specific tests being implemented by concrete subclasses. This class

implements the interface needed by the test runner to allow it to drive the

tests, and methods that the test code can use to check for and report various

kinds of failure.

Each instance of TestCase will run a single base method: the method

named methodName.

In most uses of TestCase, you will neither change

the methodName nor reimplement the default runTest() method.

在 3.2 版更改:TestCase can be instantiated successfully without providing a

methodName. This makes it easier to experiment with TestCase

from the interactive interpreter.

TestCase instances provide three groups of methods: one group used

to run the test, another used by the test implementation to check conditions

and report failures, and some inquiry methods allowing information about the

test itself to be gathered.

Methods in the first group (running the test) are:

setUp()¶

Method called to prepare the test fixture. This is called immediately

before calling the test method; other than AssertionError or SkipTest,

any exception raised by this method will be considered an error rather than

a test failure. The default implementation does nothing.

tearDown()¶

Method called immediately after the test method has been called and the

result recorded. This is called even if the test method raised an

exception, so the implementation in subclasses may need to be particularly

careful about checking internal state. Any exception, other than

AssertionError or SkipTest, raised by this method will be

considered an additional error rather than a test failure (thus increasing

the total number of reported errors). This method will only be called if

the setUp() succeeds, regardless of the outcome of the test method.

The default implementation does nothing.

setUpClass()¶

A class method called before tests in an individual class are run.

setUpClass is called with the class as the only argument

and must be decorated as a classmethod():

@classmethod

def setUpClass(cls):

...

3.2 新版功能.

tearDownClass()¶

A class method called after tests in an individual class have run.

tearDownClass is called with the class as the only argument

and must be decorated as a classmethod():

@classmethod

def tearDownClass(cls):

...

3.2 新版功能.

run(result=None)¶

Run the test, collecting the result into the TestResult object

passed as result. If result is omitted or None, a temporary

result object is created (by calling the defaultTestResult()

method) and used. The result object is returned to run()'s

caller.

The same effect may be had by simply calling the TestCase

instance.

在 3.3 版更改:Previous versions of run did not return the result. Neither did

calling an instance.

skipTest(reason)¶

Calling this during a test method or setUp() skips the current

test. See 跳过测试与预计的失败 for more information.

3.1 新版功能.

subTest(msg=None, **params)¶

Return a context manager which executes the enclosed code block as a

subtest. msg and params are optional, arbitrary values which are

displayed whenever a subtest fails, allowing you to identify them

clearly.

A test case can contain any number of subtest declarations, and

they can be arbitrarily nested.

3.4 新版功能.

debug()¶

Run the test without collecting the result. This allows exceptions raised

by the test to be propagated to the caller, and can be used to support

running tests under a debugger.

The TestCase class provides several assert methods to check for and

report failures. The following table lists the most commonly used methods

(see the tables below for more assert methods):

All the assert methods accept a msg argument that, if specified, is used

as the error message on failure (see also longMessage).

Note that the msg keyword argument can be passed to assertRaises(),

assertRaisesRegex(), assertWarns(), assertWarnsRegex()

only when they are used as a context manager.

assertEqual(first, second, msg=None)¶

Test that first and second are equal. If the values do not

compare equal, the test will fail.

In addition, if first and second are the exact same type and one of

list, tuple, dict, set, frozenset or str or any type that a subclass

registers with addTypeEqualityFunc() the type-specific equality

function will be called in order to generate a more useful default

error message (see also the list of type-specific methods).

在 3.1 版更改:Added the automatic calling of type-specific equality function.

在 3.2 版更改:assertMultiLineEqual() added as the default type equality

function for comparing strings.

assertNotEqual(first, second, msg=None)¶

Test that first and second are not equal. If the values do

compare equal, the test will fail.

assertTrue(expr, msg=None)¶

assertFalse(expr, msg=None)¶

Test that expr is true (or false).

Note that this is equivalent to bool(expr) is True and not to expr

is True (use assertIs(expr, True) for the latter). This method

should also be avoided when more specific methods are available (e.g.

assertEqual(a, b) instead of assertTrue(a == b)), because they

provide a better error message in case of failure.

assertIs(first, second, msg=None)¶

assertIsNot(first, second, msg=None)¶

Test that first and second are (or are not) the same object.

3.1 新版功能.

assertIsNone(expr, msg=None)¶

assertIsNotNone(expr, msg=None)¶

Test that expr is (or is not) None.

3.1 新版功能.

assertIn(member, container, msg=None)¶

assertNotIn(member, container, msg=None)¶

Test that member is (or is not) in container.

3.1 新版功能.

assertIsInstance(obj, cls, msg=None)¶

assertNotIsInstance(obj, cls, msg=None)¶

Test that obj is (or is not) an instance of cls (which can be a

class or a tuple of classes, as supported by isinstance()).

To check for the exact type, use assertIs(type(obj), cls).

3.2 新版功能.

It is also possible to check the production of exceptions, warnings, and

log messages using the following methods:

Method

Checks that

New in

fun(*args, **kwds) raises exc

and the message matches regex r

3.1

fun(*args, **kwds) raises warn

and the message matches regex r

3.2

The with block logs on logger

with minimum level

3.4

assertRaises(exception, callable, *args, **kwds)¶

assertRaises(exception, *, msg=None)

Test that an exception is raised when callable is called with any

positional or keyword arguments that are also passed to

assertRaises(). The test passes if exception is raised, is an

error if another exception is raised, or fails if no exception is raised.

To catch any of a group of exceptions, a tuple containing the exception

classes may be passed as exception.

If only the exception and possibly the msg arguments are given,

return a context manager so that the code under test can be written

inline rather than as a function:

with self.assertRaises(SomeException):

do_something()

When used as a context manager, assertRaises() accepts the

additional keyword argument msg.

The context manager will store the caught exception object in its

exception attribute. This can be useful if the intention

is to perform additional checks on the exception raised:

with self.assertRaises(SomeException) as cm:

do_something()

the_exception = cm.exception

self.assertEqual(the_exception.error_code, 3)

在 3.1 版更改:Added the ability to use assertRaises() as a context manager.

在 3.2 版更改:Added the exception attribute.

在 3.3 版更改:Added the msg keyword argument when used as a context manager.

assertRaisesRegex(exception, regex, callable, *args, **kwds)¶

assertRaisesRegex(exception, regex, *, msg=None)

Like assertRaises() but also tests that regex matches

on the string representation of the raised exception. regex may be

a regular expression object or a string containing a regular expression

suitable for use by re.search(). Examples:

self.assertRaisesRegex(ValueError, "invalid literal for.*XYZ'$",

int, 'XYZ')

或者:

with self.assertRaisesRegex(ValueError, 'literal'):

int('XYZ')

3.1 新版功能:Added under the name assertRaisesRegexp.

在 3.2 版更改:Renamed to assertRaisesRegex().

在 3.3 版更改:Added the msg keyword argument when used as a context manager.

assertWarns(warning, callable, *args, **kwds)¶

assertWarns(warning, *, msg=None)

Test that a warning is triggered when callable is called with any

positional or keyword arguments that are also passed to

assertWarns(). The test passes if warning is triggered and

fails if it isn't. Any exception is an error.

To catch any of a group of warnings, a tuple containing the warning

classes may be passed as warnings.

If only the warning and possibly the msg arguments are given,

return a context manager so that the code under test can be written

inline rather than as a function:

with self.assertWarns(SomeWarning):

do_something()

When used as a context manager, assertWarns() accepts the

additional keyword argument msg.

The context manager will store the caught warning object in its

warning attribute, and the source line which triggered the

warnings in the filename and lineno attributes.

This can be useful if the intention is to perform additional checks

on the warning caught:

with self.assertWarns(SomeWarning) as cm:

do_something()

self.assertIn('myfile.py', cm.filename)

self.assertEqual(320, cm.lineno)

This method works regardless of the warning filters in place when it

is called.

3.2 新版功能.

在 3.3 版更改:Added the msg keyword argument when used as a context manager.

assertWarnsRegex(warning, regex, callable, *args, **kwds)¶

assertWarnsRegex(warning, regex, *, msg=None)

Like assertWarns() but also tests that regex matches on the

message of the triggered warning. regex may be a regular expression

object or a string containing a regular expression suitable for use

by re.search(). Example:

self.assertWarnsRegex(DeprecationWarning,

r'legacy_function\(\) is deprecated',

legacy_function, 'XYZ')

或者:

with self.assertWarnsRegex(RuntimeWarning, 'unsafe frobnicating'):

frobnicate('/etc/passwd')

3.2 新版功能.

在 3.3 版更改:Added the msg keyword argument when used as a context manager.

assertLogs(logger=None, level=None)¶

A context manager to test that at least one message is logged on

the logger or one of its children, with at least the given

level.

If given, logger should be a logging.Logger object or a

str giving the name of a logger. The default is the root

logger, which will catch all messages that were not blocked by a

non-propagating descendent logger.

If given, level should be either a numeric logging level or

its string equivalent (for example either "ERROR" or

logging.ERROR). The default is logging.INFO.

The test passes if at least one message emitted inside the with

block matches the logger and level conditions, otherwise it fails.

The object returned by the context manager is a recording helper

which keeps tracks of the matching log messages. It has two

attributes:

records¶

A list of logging.LogRecord objects of the matching

log messages.

output¶

A list of str objects with the formatted output of

matching messages.

示例:

with self.assertLogs('foo', level='INFO') as cm:

logging.getLogger('foo').info('first message')

logging.getLogger('foo.bar').error('second message')

self.assertEqual(cm.output, ['INFO:foo:first message',

'ERROR:foo.bar:second message'])

3.4 新版功能.

There are also other methods used to perform more specific checks, such as:

Method

Checks that

New in

assertAlmostEqual(first, second, places=7, msg=None, delta=None)¶

assertNotAlmostEqual(first, second, places=7, msg=None, delta=None)¶

Test that first and second are approximately (or not approximately)

equal by computing the difference, rounding to the given number of

decimal places (default 7), and comparing to zero. Note that these

methods round the values to the given number of decimal places (i.e.

like the round() function) and not significant digits.

If delta is supplied instead of places then the difference

between first and second must be less or equal to (or greater than) delta.

Supplying both delta and places raises a TypeError.

在 3.2 版更改:assertAlmostEqual() automatically considers almost equal objects

that compare equal. assertNotAlmostEqual() automatically fails

if the objects compare equal. Added the delta keyword argument.

assertGreater(first, second, msg=None)¶

assertGreaterEqual(first, second, msg=None)¶

assertLess(first, second, msg=None)¶

assertLessEqual(first, second, msg=None)¶

Test that first is respectively >, >=, < or <= than second depending

on the method name. If not, the test will fail:

>>>self.assertGreaterEqual(3, 4)

AssertionError: "3" unexpectedly not greater than or equal to "4"

3.1 新版功能.

assertRegex(text, regex, msg=None)¶

assertNotRegex(text, regex, msg=None)¶

测试一个 regex 是否匹配 文本。如果不匹配,错误信息中将包含匹配模式和 文本*(或部分匹配失败的 *文本)。regex 可以是正则表达式对象或能够用于 re.search() 的包含正则表达式的字符串。

3.1 新版功能:Added under the name assertRegexpMatches.

在 3.2 版更改:The method assertRegexpMatches() has been renamed to

assertRegex().

3.5 新版功能:The name assertNotRegexpMatches is a deprecated alias

for assertNotRegex().

assertCountEqual(first, second, msg=None)¶

Test that sequence first contains the same elements as second,

regardless of their order. When they don't, an error message listing the

differences between the sequences will be generated.

Duplicate elements are not ignored when comparing first and

second. It verifies whether each element has the same count in both

sequences. Equivalent to:

assertEqual(Counter(list(first)), Counter(list(second)))

but works with sequences of unhashable objects as well.

3.2 新版功能.

The assertEqual() method dispatches the equality check for objects of

the same type to different type-specific methods. These methods are already

implemented for most of the built-in types, but it's also possible to

register new methods using addTypeEqualityFunc():

addTypeEqualityFunc(typeobj, function)¶

Registers a type-specific method called by assertEqual() to check

if two objects of exactly the same typeobj (not subclasses) compare

equal. function must take two positional arguments and a third msg=None

keyword argument just as assertEqual() does. It must raise

self.failureException(msg) when inequality

between the first two parameters is detected -- possibly providing useful

information and explaining the inequalities in details in the error

message.

3.1 新版功能.

The list of type-specific methods automatically used by

assertEqual() are summarized in the following table. Note

that it's usually not necessary to invoke these methods directly.

assertMultiLineEqual(first, second, msg=None)¶

Test that the multiline string first is equal to the string second.

When not equal a diff of the two strings highlighting the differences

will be included in the error message. This method is used by default

when comparing strings with assertEqual().

3.1 新版功能.

assertSequenceEqual(first, second, msg=None, seq_type=None)¶

Tests that two sequences are equal. If a seq_type is supplied, both

first and second must be instances of seq_type or a failure will

be raised. If the sequences are different an error message is

constructed that shows the difference between the two.

This method is not called directly by assertEqual(), but

it's used to implement assertListEqual() and

assertTupleEqual().

3.1 新版功能.

assertListEqual(first, second, msg=None)¶

assertTupleEqual(first, second, msg=None)¶

Tests that two lists or tuples are equal. If not, an error message is

constructed that shows only the differences between the two. An error

is also raised if either of the parameters are of the wrong type.

These methods are used by default when comparing lists or tuples with

assertEqual().

3.1 新版功能.

assertSetEqual(first, second, msg=None)¶

Tests that two sets are equal. If not, an error message is constructed

that lists the differences between the sets. This method is used by

default when comparing sets or frozensets with assertEqual().

Fails if either of first or second does not have a set.difference()

method.

3.1 新版功能.

assertDictEqual(first, second, msg=None)¶

Test that two dictionaries are equal. If not, an error message is

constructed that shows the differences in the dictionaries. This

method will be used by default to compare dictionaries in

calls to assertEqual().

3.1 新版功能.

Finally the TestCase provides the following methods and attributes:

fail(msg=None)¶

Signals a test failure unconditionally, with msg or None for

the error message.

failureException¶

This class attribute gives the exception raised by the test method. If a

test framework needs to use a specialized exception, possibly to carry

additional information, it must subclass this exception in order to "play

fair" with the framework. The initial value of this attribute is

AssertionError.

longMessage¶

This class attribute determines what happens when a custom failure message

is passed as the msg argument to an assertXYY call that fails.

True is the default value. In this case, the custom message is appended

to the end of the standard failure message.

When set to False, the custom message replaces the standard message.

The class setting can be overridden in individual test methods by assigning

an instance attribute, self.longMessage, to True or False before

calling the assert methods.

The class setting gets reset before each test call.

3.1 新版功能.

maxDiff¶

This attribute controls the maximum length of diffs output by assert

methods that report diffs on failure. It defaults to 80*8 characters.

Assert methods affected by this attribute are

assertSequenceEqual() (including all the sequence comparison

methods that delegate to it), assertDictEqual() and

assertMultiLineEqual().

Setting maxDiff to None means that there is no maximum length of

diffs.

3.2 新版功能.

Testing frameworks can use the following methods to collect information on

the test:

countTestCases()¶

Return the number of tests represented by this test object. For

TestCase instances, this will always be 1.

defaultTestResult()¶

Return an instance of the test result class that should be used for this

test case class (if no other result instance is provided to the

run() method).

For TestCase instances, this will always be an instance of

TestResult; subclasses of TestCase should override this

as necessary.

id()¶

Return a string identifying the specific test case. This is usually the

full name of the test method, including the module and class name.

shortDescription()¶

Returns a description of the test, or None if no description

has been provided. The default implementation of this method

returns the first line of the test method's docstring, if available,

or None.

在 3.1 版更改:In 3.1 this was changed to add the test name to the short description

even in the presence of a docstring. This caused compatibility issues

with unittest extensions and adding the test name was moved to the

TextTestResult in Python 3.2.

addCleanup(function, /, *args, **kwargs)¶

Add a function to be called after tearDown() to cleanup resources

used during the test. Functions will be called in reverse order to the

order they are added (LIFO). They

are called with any arguments and keyword arguments passed into

addCleanup() when they are added.

If setUp() fails, meaning that tearDown() is not called,

then any cleanup functions added will still be called.

3.1 新版功能.

doCleanups()¶

This method is called unconditionally after tearDown(), or

after setUp() if setUp() raises an exception.

It is responsible for calling all the cleanup functions added by

addCleanup(). If you need cleanup functions to be called

prior to tearDown() then you can call doCleanups()

yourself.

doCleanups() pops methods off the stack of cleanup

functions one at a time, so it can be called at any time.

3.1 新版功能.

classmethodaddClassCleanup(function, /, *args, **kwargs)¶

Add a function to be called after tearDownClass() to cleanup

resources used during the test class. Functions will be called in reverse

order to the order they are added (LIFO).

They are called with any arguments and keyword arguments passed into

addClassCleanup() when they are added.

If setUpClass() fails, meaning that tearDownClass() is not

called, then any cleanup functions added will still be called.

3.8 新版功能.

classmethoddoClassCleanups()¶

This method is called unconditionally after tearDownClass(), or

after setUpClass() if setUpClass() raises an exception.

It is responsible for calling all the cleanup functions added by

addClassCleanup(). If you need cleanup functions to be called

prior to tearDownClass() then you can call

doClassCleanups() yourself.

doClassCleanups() pops methods off the stack of cleanup

functions one at a time, so it can be called at any time.

3.8 新版功能.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值