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 |
假设 输入参量
|
assumeEqualsBaseline (需要 MATLAB Test™) |
假设 输入参量
名称-值参量
|
事件
事件名称 | 触发器 | 事件数据 | 事件属性 |
---|---|---|---|
AssumptionFailed | 假设失败时触发。QualificationEventData 对象传递给侦听程序回调函数。 | matlab.unittest.qualifications.QualificationEventData |
|
AssumptionPassed | 通过假设时触发。QualificationEventData 对象传递给侦听程序回调函数。 | matlab.unittest.qualifications.QualificationEventData |
|
示例
使用假设来确保您的测试只能在 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 Test 许可证,可以使用 assumeEqualsBaseline
方法来测试某个值是否等于基线数据。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)