-
TestCase 类的实例代表 unittest 宇宙中的逻辑测试单元。 此类旨在用作基类,具体测试由具体子类实现。 此类实现了测试运行程序所需的接口以允许它驱动测试,以及测试代码可用于检查和报告各种故障的方法。
TestCase 的每个实例都将运行一个基本方法:名为 methodName 的方法。 在 TestCase 的大多数使用中,您既不会更改 methodName,也不会重新实现默认的 方法。
TestCase 实例提供三组方法:一组用于运行测试,另一组由测试实现用于检查条件和报告失败,以及一些查询方法允许收集有关测试本身的信息。
第一组中的方法(运行测试)是:
-
调用方法来准备测试夹具。 这是在调用测试方法之前立即调用的; 除了 AssertionError 或 SkipTest,此方法引发的任何异常都将被视为错误而不是测试失败。 默认实现什么都不做。
-
在调用测试方法并记录结果后立即调用方法。 即使测试方法引发异常也会调用它,因此子类中的实现可能需要特别小心检查内部状态。 除 AssertionError 或 SkipTest 之外的任何异常,由该方法引发的将被视为额外错误而不是测试失败(从而增加报告错误的总数)。 无论测试方法的结果如何,仅当 setUp() 成功时才会调用此方法。 默认实现什么都不做。
-
在运行单个类中的测试之前调用的类方法。 以类作为唯一参数被调用,并且必须装饰为 classmethod():
有关更多详细信息,请参阅 类和模块装置 。
-
在单个类中的测试运行后调用的类方法。 以类作为唯一参数被调用,并且必须装饰为 classmethod():
有关更多详细信息,请参阅 类和模块装置 。
-
运行测试,将结果收集到作为 result 传递的 TestResult 对象中。 如果省略 result 或 ,则创建一个临时结果对象(通过调用 defaultTestResult() 方法)并使用。 结果对象返回给 run() 的调用者。
简单地调用 TestCase 实例也可以产生同样的效果。
-
在测试方法或 setUp() 期间调用它会跳过当前测试。 有关更多信息,请参阅 跳过测试和预期失败 。
- ,
-
返回一个上下文管理器,它执行封闭的代码块作为子测试。 msg 和 params 是可选的任意值,当子测试失败时会显示这些值,让您可以清楚地识别它们。
一个测试用例可以包含任意数量的子测试声明,并且它们可以任意嵌套。
有关详细信息,请参阅 使用子测试区分测试迭代 。
-
运行测试而不收集结果。 这允许将测试引发的异常传播给调用者,并可用于支持在调试器下运行测试。
TestCase 类提供了几种断言方法来检查和报告失败。 下表列出了最常用的方法(更多断言方法见下表):
方法
检查
新进
3.1
3.1
3.1
3.1
3.1
3.1
3.2
3.2
所有断言方法都接受一个 msg 参数,如果指定,则用作失败时的错误消息(另见 longMessage)。 注意 msg 关键字参数可以传递给 assertRaises(), assertRaisesRegex(), assertWarns(), assertWarns () 仅当它们用作上下文管理器时。
- , ,
-
测试 first 和 second 是否相等。 如果比较的值不相等,则测试将失败。
此外,如果 first 和 second 是完全相同的类型,并且是 list、tuple、dict、set、frozenset 或 str 之一或子类向 addTypeEqualityFunc 注册的任何类型() 将调用特定于类型的相等函数以生成更有用的默认错误消息(另请参阅 特定于类型的方法列表 )。
- , ,
-
测试 first 和 second 不相等。 如果值比较相等,则测试将失败。
-
,
, -
测试 expr 为真(或假)。
请注意,这相当于 而不是 (后者使用 )。 当有更具体的方法可用时,也应避免使用此方法(例如 而不是 ),因为它们在发生故障时提供了更好的错误消息。
-
,
,
, , -
测试 first 和 second 对同一个对象求值(或不求值)。
-
,
, -
测试 expr 是(或不是)。
-
,
,
, , -
测试 member 是否在 容器 中。
-
,
,
, , -
测试 obj 是(或不是)cls 的实例(可以是一个类或类的元组,由 isinstance() 支持) . 要检查确切的类型,请使用 assertIs(type(obj), cls)。
还可以使用以下方法检查异常、警告和日志消息的产生:
方法
检查
新进
提升 exc
引发 exc 并且消息匹配正则表达式 r
3.1
引发 warn
3.2
引发 warn 并且消息匹配正则表达式 r
3.2
块以最低 级别 登录 logger
3.4
-
,
,
,
, , -
测试当使用任何位置或关键字参数调用 callable 时是否引发异常,这些参数也传递给 assertRaises()。 如果引发 exception,则测试通过,如果引发另一个异常,则测试为错误,如果未引发异常,则测试失败。 要捕获一组异常中的任何一个,可以将包含异常类的元组作为 exception 传递。
如果只给出了 exception 和可能的 msg 参数,则返回一个上下文管理器,以便被测代码可以内联而不是作为函数编写:
当用作上下文管理器时,assertRaises() 接受额外的关键字参数 msg。
上下文管理器会将捕获的异常对象存储在其 属性中。 如果目的是对引发的异常执行额外检查,这可能很有用:
-
,
,
,
,
, , , -
与 assertRaises() 类似,但也测试 regex 是否与引发异常的字符串表示匹配。 regex 可以是正则表达式对象,也可以是包含适合 re.search() 使用的正则表达式的字符串。 例子:
或者:
-
,
,
,
, , -
测试当使用任何位置或关键字参数调用 callable 时触发警告,这些参数也传递给 assertWarns()。 如果触发了 warning,则测试通过,否则测试失败。 任何异常都是错误。 要捕获一组警告中的任何一个,可以将包含警告类的元组作为 warnings 传递。
如果只给出了 warning 和可能的 msg 参数,则返回一个上下文管理器,以便被测代码可以内联而不是作为函数编写:
当用作上下文管理器时,assertWarns() 接受额外的关键字参数 msg。
上下文管理器会将捕获的警告对象存储在其 属性中,并将触发警告的源代码行存储在 和 属性中。 如果目的是对捕获的警告执行额外检查,这可能很有用:
无论调用时是否有警告过滤器,此方法都有效。
-
,
,
,
,
, , , -
与 assertWarns() 类似,但也测试 regex 是否与触发警告的消息匹配。 regex 可以是正则表达式对象,也可以是包含适合 re.search() 使用的正则表达式的字符串。 例子:
或者:
- ,
-
一个上下文管理器,用于测试至少有一条消息记录在 logger 或其子节点之一上,至少具有给定的 级别 。
如果给出, logger 应该是一个 logging.Logger 对象或一个 str 给出记录器的名称。 默认是根记录器,它将捕获所有消息。
如果给定,level 应该是数字日志级别或其等效字符串(例如 或 )。 默认值为 。
如果 块内发出的至少一条消息与 logger 和 level 条件匹配,则测试通过,否则失败。
上下文管理器返回的对象是一个记录助手,它跟踪匹配的日志消息。 它有两个属性:
-
匹配日志消息的 logging.LogRecord 对象列表。
-
str 对象列表,带有匹配消息的格式化输出。
例子:
-
还有其他方法用于执行更具体的检查,例如:
方法
检查
新进
3.1
3.1
3.1
3.1
3.1
3.2
a 和 b 具有相同数量的相同元素,无论它们的顺序如何。
3.2
-
,
,
,
,
, , , , -
通过计算差值来测试 first 和 second 是否近似(或不近似)相等,四舍五入到给定的小数位数 places(默认为 7),以及与零相比。 请注意,这些方法将值四舍五入到给定的 小数位数 (即 像 round() 函数)而不是 有效数字 。
如果提供 delta 而不是 places,则 first 和 second 之间的差异必须小于或等于(或大于)[ X163X]delta。
提供 delta 和 places 会引发 TypeError。
-
,
,
, ,
, ,
, , -
测试一下第一的分别是 >、>=、< 或 <= 比第二取决于方法名称。 如果没有,测试将失败:
-
,
,
, , -
测试 regex 搜索是否匹配(或不匹配)text。 如果失败,错误消息将包括模式和 text(或模式和 text 意外匹配的部分)。 regex 可以是正则表达式对象,也可以是包含适合 re.search() 使用的正则表达式的字符串。
- , ,
-
测试序列 first 包含与 second 相同的元素,无论它们的顺序如何。 如果他们不这样做,则会生成一条错误消息,列出序列之间的差异。
比较 first 和 second 时,重复元素不会被 忽略 。 它验证每个元素在两个序列中是否具有相同的计数。 等效于: 但也适用于不可散列对象的序列。
assertEqual() 方法将相同类型对象的相等性检查分派给不同的特定于类型的方法。 大多数内置类型已经实现了这些方法,但也可以使用 addTypeEqualityFunc() 注册新方法:
- ,
-
注册一个由 assertEqual() 调用的特定于类型的方法,以检查完全相同 typeobj(非子类)的两个对象是否比较相等。 function 必须采用两个位置参数和第三个 msg=None 关键字参数,就像 assertEqual() 一样。 当检测到前两个参数之间的不等式时,它必须引发 self.failureException(msg) - 可能提供有用的信息并在错误消息中详细解释不等式。
assertEqual() 自动使用的特定于类型的方法列表总结在下表中。 请注意,通常不需要直接调用这些方法。
方法
用来比较
新进
字符串
3.1
序列
3.1
列表
3.1
元组
3.1
集或冻结集
3.1
听写
3.1
- , ,
-
测试多行字符串 first 是否等于字符串 second。 当不相等时,突出显示差异的两个字符串的差异将包含在错误消息中。 在将字符串与 assertEqual() 进行比较时,默认使用此方法。
- , , ,
-
测试两个序列是否相等。 如果提供了 seq_type,则 first 和 second 都必须是 seq_type 的实例,否则将引发故障。 如果序列不同,则会构建一条错误消息,显示两者之间的差异。
这个方法不是直接被assertEqual()调用,而是用来实现assertListEqual()和assertTupleEqual()。
-
,
,
, , -
测试两个列表或元组是否相等。 如果不是,则会构建一条错误消息,仅显示两者之间的差异。 如果任一参数的类型错误,也会引发错误。 在将列表或元组与 assertEqual() 进行比较时,默认使用这些方法。
- , ,
-
测试两组是否相等。 如果不是,则构建一个错误消息,列出集合之间的差异。 在将集合或冻结集与 assertEqual() 进行比较时,默认使用此方法。
如果 first 或 second 没有 方法,则失败。
- , ,
-
测试两个字典是否相等。 如果不是,则会构造一条错误消息,显示字典中的差异。 默认情况下,此方法将用于在调用 assertEqual() 时比较字典。
最后 TestCase 提供了以下方法和属性:
-
无条件发出测试失败信号,错误消息为 msg 或 。
-
这个类属性给出了测试方法引发的异常。 如果测试框架需要使用专门的异常,可能携带额外的信息,它必须子类化这个异常,以便与框架“公平竞争”。 该属性的初始值为 AssertionError。
-
此类属性确定当自定义失败消息作为 msg 参数传递给失败的 assertXYY 调用时会发生什么。 是默认值。 在这种情况下,自定义消息会附加到标准失败消息的末尾。 当设置为 时,自定义消息将替换标准消息。
通过在调用断言方法之前将实例属性 self.longMessage 分配给 或 ,可以在单个测试方法中覆盖类设置。
在每次测试调用之前重置类设置。
-
此属性通过报告失败差异的断言方法控制差异输出的最大长度。 默认为 80*8 个字符。 受此属性影响的断言方法是 assertSequenceEqual()(包括所有委托给它的序列比较方法)、assertDictEqual() 和 assertMultiLineEqual()。
将 设置为 意味着没有最大差异长度。
测试框架可以使用以下方法来收集有关测试的信息:
-
返回此测试对象表示的测试数量。 对于 TestCase 实例,这将始终是 。
-
返回应用于此测试用例类的测试结果类的实例(如果没有其他结果实例提供给 run() 方法)。
对于 TestCase 实例,这将始终是 TestResult 的实例; TestCase 的子类应该根据需要覆盖它。
-
返回标识特定测试用例的字符串。 这通常是测试方法的全名,包括模块和类名。
-
返回测试的描述,如果没有提供描述,则返回 。 此方法的默认实现返回测试方法文档字符串的第一行(如果可用)或 。
- , ,
-
在tearDown()后添加一个函数,用于清理测试时使用的资源。 函数的调用顺序与它们添加的顺序相反 (LIFO)。 当它们被添加时,任何参数和关键字参数都会被调用到 addCleanup() 中。
如果 setUp() 失败,意味着 tearDown() 没有被调用,那么任何添加的清理函数仍然会被调用。
-
如果 setUp() 引发异常,则在 tearDown() 或 setUp() 之后无条件调用此方法。
它负责调用addCleanup()添加的所有清理函数。 如果您需要调用清理函数 prior 到 tearDown() 那么您可以自己调用 doCleanups()。
doCleanups() 从清理函数堆栈中一次弹出一个方法,因此可以随时调用。
-
- , , ,
- 此类实现了 TestCase 接口的一部分,该接口允许测试运行器驱动测试,但不提供测试代码可用于检查和报告错误的方法。 这用于使用遗留测试代码创建测试用例,允许将其集成到基于 unittest 的测试框架中。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10869.html