Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

verifyWarning

类: matlab.unittest.qualifications.Verifiable
包: matlab.unittest.qualifications

验证函数发出指定的警告

说明

示例

verifyWarning(testCase,actual,identifier) 验证 actual 是发出 identifier 指定的警告的函数句柄。

示例

verifyWarning(testCase,actual,identifier,diagnostic) 还将 diagnostic 中的诊断信息与验证相关联。

示例

[output1,...,outputN] = verifyWarning(___) 还返回在调用函数句柄时产生的任何输出。您可以使用以前语法中的任意输入参数组合。

输入参数

全部展开

测试用例对象,指定为 matlab.unittest.qualifications.Verifiable 类的实例。由于 matlab.unittest.TestCase 类会子类化 matlab.unittest.qualifications.Verifiable 并继承其方法,因此 testCase 通常是 matlab.unittest.TestCase 实例。

要测试的值,指定为任何数据类型的值。虽然您可以提供任何数据类型的值,但如果 actual 不是函数句柄,测试将失败。

示例: @() myFunction(1,2)

示例: @() mkdir("myFolder")

警告标识符,指定为字符向量、字符向量元胞数组或字符串数组。

示例: "MATLAB:MKDIR:DirectoryExists"

示例: ["MyComponent:FirstID" "MyComponent:SecondID"]

当验证通过或失败时显示的诊断信息,指定为字符串数组、字符数组、函数句柄或 matlab.unittest.diagnostics.Diagnostic 对象数组。

根据测试运行程序的配置,测试框架可能会在验证通过或失败时显示诊断信息。默认情况下,框架仅在验证失败时显示诊断信息。您可以通过自定义测试运行程序来覆盖默认行为。例如,使用 DiagnosticsOutputPlugin 实例来显示失败和通过事件诊断信息。

示例: "My Custom Diagnostic"

示例: @dir

属性

Sealedtrue

要了解方法的属性,请参阅方法属性

示例

全部展开

验证 mkdir 函数在用于创建已存在的文件夹时是否发出指定的警告。

此示例假设您的当前文件夹中存在名为 myFolder 的子文件夹。如果该子文件夹不存在,请创建它。

if ~isfolder("myFolder")
    mkdir myFolder
end

如果您尝试再次创建 myFolder,则 mkdir 会发出警告。返回警告标识符。

mkdir myFolder
Warning: Directory already exists.
[~,identifier] = lastwarn
identifier = 
'MATLAB:MKDIR:DirectoryExists'

现在,创建一个供交互测试的测试用例。验证如果调用 mkdir 来创建现有文件夹,它会发出警告,并且警告具有标识符 "MATLAB:MKDIR:DirectoryExists"

testCase = matlab.unittest.TestCase.forInteractiveUse;
verifyWarning(testCase,@() mkdir("myFolder"),"MATLAB:MKDIR:DirectoryExists")
Verification passed.

测试 actual 值是否为发出指定警告的函数句柄。

创建一个供交互测试的测试用例。

testCase = matlab.unittest.TestCase.forInteractiveUse;

验证 warning 函数是否发出具有预期的标识符的警告。

verifyWarning(testCase,@() warning("SOME:warning:id","Warning!"), ...
    "SOME:warning:id")
Verification passed.

使用“OTHER:warning:id”作为预期的警告标识符,重复该测试。测试失败。

verifyWarning(testCase,@() warning("SOME:warning:id","Warning!"), ...
    "OTHER:warning:id","Warning identifiers must match.")
Warning: Warning! 
Verification failed.
    ----------------
    Test Diagnostic:
    ----------------
    Warning identifiers must match.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyWarning failed.
    --> The function handle did not issue the expected warning(s).
        
        Actual Warning(s):
            --> 'SOME:warning:id'
        Expected Warning(s):
            --> 'OTHER:warning:id'
    
    Evaluated Function:
      function_handle with value:
    
        @()warning("SOME:warning:id","Warning!")
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestForSpecifiedWarningsExample.m (TestForSpecifiedWarningsExample) at 21

测试 rand 函数,并检查函数的输出。测试失败,因为 rand 没有发出任何警告。

r = verifyWarning(testCase,@rand,"SOME:warning:id")
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyWarning failed.
    --> The function handle did not issue any warnings.
        
        Expected Warning(s):
            --> 'SOME:warning:id'
    
    Evaluated Function:
      function_handle with value:
    
        @rand
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestForSpecifiedWarningsExample.m (TestForSpecifiedWarningsExample) at 27

r =

    0.8147

验证在 actual 值并非函数句柄时测试是否失败。

verifyWarning(testCase,5,"SOME:warning:id")
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyWarning failed.
    --> The value must be an instance of the expected type.
        
        Actual Class:
            double
        Expected Type:
            function_handle
    
    Actual Value:
         5
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestForSpecifiedWarningsExample.m (TestForSpecifiedWarningsExample) at 31

提示

  • verifyWarning 方法非常方便。例如,verifyWarning(testCase,actual,identifier) 在功能上等效于以下代码。

    import matlab.unittest.constraints.IssuesWarnings
    testCase.verifyThat(actual,IssuesWarnings(cellstr(identifier)))
    

    当直接通过 verifyThat 使用 IssuesWarnings 约束时,可利用更多功能。

  • 使用此确认在不引发异常的条件下生成和记录失败。由于确认不会引发异常,因此即使出现确认失败的情形,依然会完成所有的测试内容。通常,确认指的是对单元测试的主要验证,因为这些确认一般不要求提前从测试中退出。使用其他验证类型来测试是否违反先决条件或测试安装是否正确:

    • 使用断言验证确保测试环境满足无论如何都不会导致测试失败的先决条件。假设失败会生成已筛选的测试,且测试框架会将测试设为 Incomplete。有关详细信息,请参阅 matlab.unittest.qualifications.Assumable

    • 当失败条件导致当前测试内容的剩余部分都失效,但不会阻止后续测试正确执行时,使用断言验证。断言点处的失败会将当前测试展现为 FailedIncomplete。有关详细信息,请参阅 matlab.unittest.qualifications.Assertable

    • 使用致命断言验证在失败时中止测试会话。当失败涉及根本以致继续测试已经没有意义时,这些验证非常有用。当脚手架拆解不能正确还原环境状态,适合中止测试并启动一个新会话时,致命断言也很有用。有关详细信息,请参阅 matlab.unittest.qualifications.FatalAssertable

版本历史记录

在 R2013a 中推出