matlab.unittest.qualifications.Assumable 类
命名空间: matlab.unittest.qualifications
用于过滤测试内容的鉴定
描述
Assumable
类提供了一种用于过滤测试内容的鉴定机制。除了对失败执行的操作外,Assumable
类与 matlab.unittest.qualifications
命名空间中的其他鉴定类的工作方式相同。
假设失败时,Assumable
类将引发 AssumptionFailedException
对象以告知测试框架发生失败。然后,框架会将当前测试内容标记为已过滤并继续测试。假设确保测试仅在满足特定先决条件时运行,但其实在不满足此先决条件的情况下执行测试也不会导致测试失败。如果未满足先决条件会导致测试失败,请使用断言来代替假设。
当在 TestCase
类的一个方法中产生假设失败时,该方法的类型确定过滤哪些测试:
Test
方法 - 框架将整个Test
方法标记为已过滤。TestMethodSetup
或TestMethodTeardown
方法 - 框架将针对该方法实例运行的Test
方法标记为已过滤。TestClassSetup
或TestClassTeardown
方法 - 框架将整个测试类标记为已过滤。
当您使用假设时,请确保您的测试内容满足异常安全条件。由于假设不会导致测试失败,因此部分测试代码可能会以静默方式被过滤。为了避免产生无效的测试代码,请考虑监视您的已过滤测试。
matlab.unittest.qualifications.Assumable
类是一个 handle
类。
方法
公共方法
Assumable
类为测试值和如何响应失败提供了几种鉴定方法。例如,assumeEmpty
测试某个值为空,而 assumeTrue
测试 actual 值为 true。
注意
Assumable
类的方法对应于 Verifiable
类的方法。它们仅在鉴定类型方面有所不同。您可以像调用 Verifiable
方法一样调用 Assumable
方法。
assumeEqual |
假设 输入参量
名称-值参量
|
assumeFail |
生成无条件的假设失败。类似于 输入参量
|
assumeFalse |
假设 输入参量
|
assumeNotEqual |
假设 输入参量
|
assumeNotSameHandle |
假设 输入参量
|
assumeReturnsTrue |
假设 输入参量
|
assumeSameHandle |
假设 输入参量
|
assumeThat |
假设 输入参量
|
assumeTrue |
假设 输入参量
|
assumeError |
假设 输入参量
输出参量
|
assumeWarning |
假设 输入参量
输出参量
|
assumeWarningFree |
假设 输入参量
输出参量
|
assumeGreaterThan |
假设 输入参量
|
assumeGreaterThanOrEqual |
假设 输入参量
|
assumeLessThan |
假设 输入参量
|
assumeLessThanOrEqual |
假设 输入参量
|
assumeEmpty |
假设 输入参量
|
assumeLength |
假设 输入参量
|
assumeNotEmpty |
假设 输入参量
|
assumeNumElements |
假设 输入参量
|
assumeSize |
假设 输入参量
|
assumeClass |
假设 输入参量
|
assumeInstanceOf |
假设 输入参量
|
assumeMatches |
假设 输入参量
|
assumeSubstring |
假设 输入参量
|
事件
事件名称 | 触发器 | 事件数据 | 事件属性 |
---|---|---|---|
AssumptionFailed | 假设失败时触发。QualificationEventData 对象传递给侦听程序回调函数。 | matlab.unittest.qualifications.QualificationEventData |
|
AssumptionPassed | 通过假设时触发。QualificationEventData 对象传递给侦听程序回调函数。 | matlab.unittest.qualifications.QualificationEventData |
|
示例
仅在 Linux 平台上运行测试
使用假设来确保您的测试只能在 Linux® 平台上运行。如果 MATLAB 安装在 Microsoft® Windows® 或 macOS 平台上,则指示测试框架过滤测试。
在当前文件夹的一个文件中创建 LinuxTests
类。要针对平台进行测试,请在 TestClassSetup
methods
代码块中定义 testPlatform
方法。该方法使用对 assumeTrue
方法的调用来测试 MATLAB 是否安装在 Linux 平台上。如果假设失败,框架会过滤整个测试类。
classdef LinuxTests < matlab.unittest.TestCase methods (TestClassSetup) function testPlatform(testCase) testCase.assumeTrue(isunix && ~ismac, ... "Tests must run on a Linux platform.") end end end
在具有 Test
属性的 methods
代码块中定义测试。此示例中的测试仅用于说明目的。
classdef LinuxTests < matlab.unittest.TestCase methods (TestClassSetup) function testPlatform(testCase) testCase.assumeTrue(isunix && ~ismac, ... "Tests must run on a Linux platform.") end end methods (Test) function test1(testCase) testCase.verifyWarningFree(@rand) end function test2(testCase) testCase.verifyWarningFree(@() size([])) end end end
在 Windows 计算机上运行测试。由于假设在类设置级别失败,框架会过滤由 LinuxTests
类定义的测试。
runtests("LinuxTests")
Running LinuxTests ================================================================================ All tests in LinuxTests were filtered. Test Diagnostic: Tests must run on a Linux platform. Details ================================================================================ Done LinuxTests __________ Failure Summary: Name Failed Incomplete Reason(s) =============================================================== LinuxTests/test1 X Filtered by assumption. --------------------------------------------------------------- LinuxTests/test2 X Filtered by assumption.
ans = 1×2 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 0 Passed, 0 Failed, 2 Incomplete. 0.27782 seconds testing time.
详细信息
诊断
根据测试运行器的配置,测试框架可能会在鉴定通过或失败时显示诊断信息。默认情况下,框架仅在鉴定失败时显示诊断信息。您可以通过自定义测试运行器来覆盖默认行为。例如,您可以使用 DiagnosticsOutputPlugin
实例来显示失败和通过事件诊断信息。
要将诊断消息添加到测试用例中,请在任何鉴定方法中使用可选的 diagnostic
参量。您可以将 diagnostic
指定为字符串数组、字符数组、函数句柄或 matlab.automation.diagnostics.Diagnostic
对象数组。
异常安全
测试内容有时会更改其环境的状态。当环境可以还原到其原始状态时,即使存在异常,内容也满足异常安全条件。异常安全可确保引发异常的测试不会因破坏环境而影响后续测试。为了实现异常安全,请使用 addTeardown
方法执行所有拆解操作。在原始状态更改之前或之后立即调用 addTeardown
,中间没有任何可能引发异常的其他代码。
例如,下面的代码不满足异常安全条件。如果测试失败,测试框架不会关闭图窗。此图窗的存在可能导致后续测试失败。
% Not exception safe
f = figure;
testCase.assumeEqual(actual,expected)
close(f)
另一方面,以下代码满足异常安全条件,因为不管测试结果如何,框架都会关闭图窗。
% Exception safe
f = figure;
testCase.addTeardown(@close,f)
testCase.assumeEqual(actual,expected)
使用 addTeardown
拆解脚手架并不能保证代码就是异常安全的。以下代码不满足异常安全条件,因为对 addTeardown
的调用是在测试后进行的。如果测试失败,框架不会关闭图窗。
% Not exception safe
f = figure;
testCase.assumeEqual(actual,expected)
testCase.addTeardown(@close,f)
版本历史记录
在 R2013a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)