美文网首页
Unittest 单元测试框架4 - 类与函数(2)

Unittest 单元测试框架4 - 类与函数(2)

作者: 庄周幻梦 | 来源:发表于2021-04-20 21:09 被阅读0次

前文:
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 the msg 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应该是一个数字级别或它的等效字符串(例如ERRORlogger.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比较,测试第一和firstsecond是否近似(或不近似)相等。注意,这些方法将四舍五入到给定的小数位数(例如round()函数),而不是有效数字。

    如果提供的是delta而不是places, 那么firstsecond之间的差值必须小于或等于(或大于)delta.

    同时提供deltaplaces会引发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 name assertRegexpMatches.
    在3.2版本中更改: the method assertRegexpMatches() has been renamed to assertRegex().
    3.2新版本功能: assertNotRegex()
    3.2新版本功能: The name assertNotRegexpMatches is deprecated alias for assertNotRegex().

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

  • assertCountEqual(first, second, msg=None)

    3.2新版本功能
    测试序列firstsecond包含相同的元素,不管他们顺序如何。 如果没有,将生成一条列出序列之间差异的错误消息。

    在比较firstsecond的时候,不会忽略重复的元素。它验证两个两个序列中的每个元素是否有相同的

    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, firstsecond都必须是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#
如有侵权,请联系删除

相关文章

网友评论

      本文标题:Unittest 单元测试框架4 - 类与函数(2)

      本文链接:https://www.haomeiwen.com/subject/egkolltx.html