Main Content

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

verifyClass

类: matlab.unittest.qualifications.Verifiable
命名空间: matlab.unittest.qualifications

验证指定值的类

说明

示例

verifyClass(testCase,actual,class) 验证 actual 的类是指定的类。

此方法验证完全匹配的类。要确认类层次结构中的包含内容,请使用 verifyInstanceOf

示例

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

输入参数

全部展开

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

要测试的值,指定为任何数据类型的值。

预期的类,指定为字符串标量、字符向量或 meta.class 实例。

示例: "MyClass"

示例: ?MyClass

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

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

示例: "My Custom Diagnostic"

示例: @dir

属性

Sealedtrue

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

示例

全部展开

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

testCase = matlab.unittest.TestCase.forInteractiveUse;

验证数值 5 的类是 double

verifyClass(testCase,5,"double")
Verification passed.

使用 meta.class 实例而不是字符串重复该测试。

verifyClass(testCase,5,?double)
Verification passed.

测试零是否为逻辑值。测试失败。

verifyClass(testCase,0,"logical","Value must be logical.")
Verification failed.
    ----------------
    Test Diagnostic:
    ----------------
    Value must be logical.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyClass failed.
    --> The value's class is incorrect.
        
        Actual Class:
            double
        Expected Class:
            logical
    
    Actual Value:
         0
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestNumericValuesExample.m (TestNumericValuesExample) at 20

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

testCase = matlab.unittest.TestCase.forInteractiveUse;

验证 @sin 是否为函数句柄。

verifyClass(testCase,@sin,?function_handle)
Verification passed.

使用函数名称 "sin" 重复该测试。测试失败。

verifyClass(testCase,"sin",?function_handle)
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyClass failed.
    --> The value's class is incorrect.
        
        Actual Class:
            string
        Expected Class:
            function_handle
    
    Actual Value:
        "sin"
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestAFunctionHandleExample.m (TestAFunctionHandleExample) at 17

使用 verifyClass 方法测试类是否完全匹配。

在当前文件夹下的文件中,创建 ExampleHandle 句柄类。

classdef ExampleHandle < handle
    properties
        Number = 1;
    end
end

创建一个已定义类的实例。

actual = ExampleHandle;

为交互式测试创建一个测试用例,然后验证 actual 的类是 ExampleHandle

testCase = matlab.unittest.TestCase.forInteractiveUse;
verifyClass(testCase,actual,?ExampleHandle)
Verification passed.

使用 handle 类重复该测试。测试失败,因为 handle 不是 actual 值的确切类。

verifyClass(testCase,actual,?handle)
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyClass failed.
    --> The value's class is incorrect.
        
        Actual Class:
            ExampleHandle
        Expected Class:
            handle
    
    Actual Value:
      ExampleHandle with properties:
    
        Number: 1
    ------------------
    Stack Information:
    ------------------
    In C:\work\TestInstanceOfADerivedClassExample.m (TestInstanceOfADerivedClassExample) at 26

使用 verifyClass 测试函数输出的类。

在当前文件夹的一个文件中创建 add5 函数。该函数接受数值输入,并将其增加 5。

function y = add5(x)
% add5 - Increment input by 5
if ~isa(x,"numeric")
    error("add5:InputMustBeNumeric","Input must be numeric.")
end
y = x + 5;
end

使用有效输入调用函数。

actual = add5(1);

为交互式测试创建一个测试用例,然后验证 actual 的类是 double

testCase = matlab.unittest.TestCase.forInteractiveUse;
verifyClass(testCase,actual,?double)
Verification passed.

提示

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

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

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

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

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

版本历史记录

在 R2013a 中推出