前文:
Unittest 单元测试框架1 - 基本使用和命令行选项
Unittest 单元测试框架2 - 编写测试代码以及如何跳过测试用例
Unittest 单元测试框架3 - 使用子测试区分测试迭代
Unittest 单元测试框架4 - 类与函数(1)
-
assertWarnsRegex(warning, regex, callable, *args, **kwds)
-
assertWarnsRegex(warning, regex, *, msg=None)
3.2新版本功能
在3.3版本更改: Added themsg
keyword argument when used as a context manager.像
assertWarns()
一样,但也测试regex
是否匹配出发的警告消息。 regex可以是一个正则表达式对象,也可以是一个包含适合re.search()
使用的正则表达式的字符串。例如:self.assertWarnsRegex(DeprecationWarning, r'legacy_function\(\) is deprecated', legacy_function, 'XYZ')
或者:
with self.assertWarnsRegex(RuntimeWarning, 'unsafe frobnicating'): frobnicate('/etc/passwd')
-
assertLogs(logger=None, level=None)
3.4新版本功能
测试至少有一条消息被记录在日志记录器或它的一个子日志记录器上的上下文管理器,至少具有给定的级别。
如果给定, logger 应该是一个
logging.logger
对象或是一个给定的日志记录器的名称的str
。默认值是根日志记录器,它将捕获未被传播的派生日志记录器阻塞的所有消息。如果给定,
level
应该是一个数字级别或它的等效字符串(例如ERROR
或logger.ERROR
)。 默认值是logging.INFO
。如果with语句块中发出的消息至少有一条与记录器和level条件匹配,则测试通过,否则测试失败。
由上下文管理器返回的对象是一个记录助手, 它跟踪匹配的日志消息。它有两个属性:
records
一个匹配日志信息的logging.LogRecord
对象列表output
一个带有匹配消息的格式化输出的str
对象列表示例:
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'])
还有其他一些方法用于执行更具体的检查,例如:
Method | Checks that | New in |
---|---|---|
assertAlmostEqual(a, b) |
round(a-b, 7) == 0 |
|
assertNotAlmostEqual(a, b) |
round(a-b, 7) != 0 |
|
assertGreater(a, b) |
a > b |
3.1 |
assertGreaterEqual(a, b) |
a >= b |
3.1 |
assertLess(a, b) |
a < b |
3.1 |
assertLessEqual(a, b) |
a <= b |
3.1 |
assertRegex(s, r) |
r.search(s) |
3.1 |
assertNotRegex(s, r) |
not r.search(s) |
3.2 |
assertCountEqual(a, b) |
a and b have the same elements in the same number, regardless if their order |
3.2 |
-
assertAlmostEqual(first, second, places=7, msg=None, delta=None)
-
assertNotAlmostEqual(first, second, places=7, msg=None, delta=None)
通过计算差值,四舍五入到给定的小数位数(默认为7),并与0比较,测试第一和first
和second
是否近似(或不近似)相等。注意,这些方法将四舍五入到给定的小数位数(例如round()
函数),而不是有效数字。如果提供的是delta而不是places, 那么
first
和second
之间的差值必须小于或等于(或大于)delta.同时提供
delta
和places
会引发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)
根据方法名测试first
>, >=, < 或者 <=second
。 如果不是则测试Fail.self.assertGreaterEqual(3, 4) # assertionError: "3" unexpectedly not greater than or equal to "4"
-
assertRegex(text, regex, msg=None)
-
assertNotRegex(text, regex, msg=None)
3.1新版本功能: Added under the nameassertRegexpMatches
.
在3.2版本中更改: the methodassertRegexpMatches()
has been renamed toassertRegex()
.
3.2新版本功能:assertNotRegex()
3.2新版本功能: The nameassertNotRegexpMatches
is deprecated alias forassertNotRegex()
.测试一个
regex
是否匹配text
, 如果不匹配,错误信息中将包含匹配模式和文本(或部分匹配失败的文本)。 regex可以是正则表达式对象或能够用于re.search()
的包含正则表达式的字符串。 -
assertCountEqual(first, second, msg=None)
3.2新版本功能
测试序列first
和second
包含相同的元素,不管他们顺序如何。 如果没有,将生成一条列出序列之间差异的错误消息。在比较
first
和second
的时候,不会忽略重复的元素。它验证两个两个序列中的每个元素是否有相同的assertEqual()
方法将相同类型的对象的相等性检查分派给不同的特定于类型的方法。这些方法已经大多数已经在内置方法中实现了,但也可以使用addTypeEqualityFunc()
注册新方法。 -
addTypeEqualityFunc(typeobj, function)
3.1新版本功能
注册一个由
assertEqual()
调用的特定于类型的方法来检查两个完全相同类型的对象(不是子类)是否相等。函数必须接收两个位置参数和第三个msg=None
的关键字参数, 就像assertEqual()
做的一样。当检测到前两个参数之间的不相等时,他必须引发self.fileureException(msg)
- 可能会提供有用的信息,并在错误消息中详细解释不相等。assertEqual()
自动使用的特定于类型的方法列表汇总在下表中。请注意,通常没有必要直接调用这些方法:Method Used to compare New in assertMultiLineEqual(a, b)
strings 3.1 assertSequenceEqual(a, b)
sequences 3.1 assertListEqual(a, b)
lists 3.1 assertTupleEqual(a, b)
tuples 3.1 assertSetEqual(a, b)
sets or frozensets 3.1 assertDictEqual(a, b)
dicts 3.1
-
assertMultiLineEqual(first, second, msg=None)
3.1新版本功能
首先测试多行字符串
first
是否等于second
字符串. 当两个字符串差异不相等的时候,突出显示差异将会包含在错误信息中。默认情况下,这个方法在assertEqual()
比较字符串的时候使用。 -
assertSequenceEqual(first, second, msg=None, seq_type=None)
3.1新版本功能
测试两个序列是否相等。如果提供了seq_type,
first
和second
都必须是seq_type
的实例, 否则将引发失败。如果序列不同,则构造一条错误信息,显示两者之间的差异。这个方法不是由
assertEqual()
直接调用的,而是用于实现assertListEqual()
和assertTupleEqual()
。 -
assertListEqual(first, second, msg=None)
-
assertTupleEqual(first, second, msg=None)
3.1新版本功能
测试两个列表或者元组是否相等。如果不相等,则构造一条只显示两者之间擦会议的错误信息。如果其中任何一个和形参类型错误,也会引发错误。当使用
assertEqual()
比较列表或者元组的时候,默认使用这些方法 -
assertSetEqual(first, second, msg=None)
3.1新版本功能
测试两个集合是否相等,如果不相等,则构造一条列出集合之间差异的错误消息,默认情况下这个方法在与
assertEqual()
比较set
或者frozensets
的时候使用。如果
first
或者second
中的任何一个没有set.difference()
方法将会失败。 -
assertDictEqual(first, second, msg=None)
3.1新版本功能
测试两个字典是否相等,如果不相等,则构造一个错误信息,显示两个字典之间的差异。默认情况下这个方法在与
assertEqual()
比较两个字典的时候调用。
最后TestCase
提供了以下方法和属性:
-
fail(msg=None)
无条件的发出测试失败的信号,错误消息使用msg
或者None
-
failureException
这个类属性给出由测试方法引发的异常。如果一个测试框架需要使用一个特殊的异常,可能是为了携带额外的信息,他必须子类化这个异常,以便于框架公平竞争
。该属性的初始值是AssertionError
。 -
longMessage
3.1新版本功能
当自定义失败消息作为
msg
参数传递给失败的assertXYZ
调用时,默认值为True。在本例中,自定义信息被附件到标准失败消息的末尾。当设置为False的时候,自定义消息将替换标准消息。在个别的测试方法中通过分配一个实例属性可以重写类设置, 在调用
assert
方法之前,将self.LongMessage
设置为True
或者False
在每次测试调用之前类设置会被重置。
-
maxDiff
3.2新版本功能
此属性控制在失败时报告差异的
assert
方法输出的差异的最大长度。默认为80*8个字符。受此属性影响的Assert
方法有assertSequenceEqual()
(包括为委任给他的所有序列比较方法)、assertDictEqual()
和assertMultiLineEqual()
。将
maxDiff
设置为None
意味着diffs
没有最大长度。
在测试中测试框架可以使用下面的方法收集信息
-
countTestCases()
返回次测试对象表示的测试数量。对于TestCase
实例,这将始终是1 -
defaultTestResult()
返回测试结果类的实例,该实例应用用于这个测试用例类(如果没有为run()
方法提供其他结果实例)对于
TestCase
实例,这将始终是TestResult
的实例;TestCase
的子类应该在必要时重写这一点。 -
id()
返回一个标识特定测试用例的字符串。者通常是测试方法的全名,包括模块和类名。
-
shortDescription()
返回测试的描述,如果没有提供描述,则返回None。该方法的默认实现将返回测试方法文档字符串的第一行(如果可用的话)或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. The caused compatibility issues with unittest extensions and adding the test name was moved to the
TextTestResult()
in Python 3.2. -
addCleanup(function, /, *args, **kwds)
3.1新版本功能
添加一个在
tearDown()
之后调被调用的函数来清理测试期间使用的资源。函数的调用书顺序与被添加的顺序相反(LIFO)。当添加它们时, 它们会被传入addCleanup()
的任何参数和关键字参数调用.如果
setUp()
失败,意味着没有调用tearDown()
, 然后添加的任何清理函数仍然会被调用 -
doCleanups()
3.1新版本功能
此方法在
tearDown()
之后无条件调用,如果setUp()
引发异常,则在setUp()
之后调用。它负责调用
addCleanup()
添加的所有清理函数。如果你需要再tearDown()
之前调用清理函数,那么你可以自己调用docleanup()
doCleanup()
每次从清理函数堆栈中取出一个方法,因此它可以在任何时候被调用。 -
classmethod
addClassCleanup(function, /, *args, **kwds)
3.8新版本功能
在
tearDownClass()
之后调用一个函数来清理测试类期间使用的资源。函数的调用顺序与它们被添加的顺序相反(LIFO),当添加它们的时候,它们会被传入addClassCleanup()
的任何参数和关键字参数调用。如果
setUpClass()
失败,意味着没有调用tearDownClass()
,那么添加的任何清理函数仍然会被调用。 -
classmethod
doClassCleanups(function, /, *args, **kwds)
3.8新版本功能
这个方法在
tearDownClass()
之后无条件调用,如果setUpClass()
引发异常,则在setUpClass()
之后调用。它负责调用
addClassCleanup()
添加的所有清理函数。如果您需要在tearDownClass()
之前调用清理函数,那么您可以自己调用doClassCleanups()
doClassCleanups()
每次从清理函数堆栈中取出一个方法,因此可以在任何时候调用它。
原文来自于https://docs.python.org/3.9/library/unittest.html#
如有侵权,请联系删除
网友评论