Main Content

matlab.unittest.diagnostics.ConstraintDiagnostic 类

命名空间: matlab.unittest.diagnostics
超类: matlab.automation.diagnostics.Diagnostic

此诊断的字段对约束通用

描述

matlab.unittest.diagnostics.ConstraintDiagnostic 类提供对约束通用的字段的诊断。这些字段包括描述、条件、实际值和预期值。有关详细信息,请参阅诊断字段

使用 ConstraintDiagnostic 类可以方便地向由您的自定义约束生成的诊断添加通用外观。您可以使用 ConstraintDiagnostic 对象来实现 Constraint 子类的 getDiagnosticFor 方法或 BooleanConstraint 子类的 getNegativeDiagnosticFor 方法。

matlab.unittest.diagnostics.ConstraintDiagnostic 类是一个 handle 类。

创建对象

描述

示例

diag = matlab.unittest.diagnostics.ConstraintDiagnostic 创建一个 ConstraintDiagnostic 对象。然后,您可以设置该对象的属性来自定义约束诊断。

属性

全部展开

除了以下属性之外,ConstraintDiagnostic 类还从 Diagnostic 类继承 ArtifactsDiagnosticText 属性。

描述

常规诊断信息,指定为字符串标量或字符向量。

属性:

GetAccess
public
SetAccess
public

显示 Description 属性中文本的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,约束不显示描述。

属性:

GetAccess
public
SetAccess
public
条件

格式化的条件列表,以字符向量形式返回。当框架显示诊断结果时,每个条件另起一个新行,以箭头 (-->) 分隔符开头。

一个条件包含特定于测试失败原因的信息,充当“子诊断”。使用 addConditionaddConditionsFrom 方法向列表中添加条件。

属性:

GetAccess
public
SetAccess
private

存储在 Conditions 属性中的条件列表中的条件数,以非负整数标量形式返回。

属性:

GetAccess
public
SetAccess
private

数据类型: double

显示 Conditions 属性中条件列表的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,约束不显示条件列表。

属性:

GetAccess
public
SetAccess
public
实际值

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

属性:

GetAccess
public
SetAccess
public

实际值的头部信息,指定为字符串标量或字符向量。

属性:

GetAccess
public
SetAccess
public

显示实际值及其头部信息的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,约束不显示实际值。

属性:

GetAccess
public
SetAccess
public
预期值

预期值,指定为任意数据类型的值(如果适用)。

属性:

GetAccess
public
SetAccess
public

预期值的头部信息,指定为字符串标量或字符向量。

属性:

GetAccess
public
SetAccess
public

显示预期值及其头部信息的选项,指定为数值或逻辑值 0 (false) 或 1 (true)。默认情况下,约束不显示预期值。

属性:

GetAccess
public
SetAccess
public

方法

全部展开

示例

全部折叠

创建一个自定义约束,该约束确定一个值的大小是否与预期值的大小相同。要为约束生成诊断信息,请使用 ConstraintDiagnostic 类实现其 getDiagnosticFor 方法。

在当前文件夹下的一个文件中,创建一个名为 IsSameSizeAs 的类,该类派生自 matlab.unittest.constraints.Constraint,并实现 satisfiedBygetDiagnosticFor 方法。要实现 getDiagnosticFor 方法,请使用 ConstraintDiagnostic 类的实例。使用 ConstraintDiagnostic 类可以方便地自定义通过或未通过测试的各种诊断字段。

classdef IsSameSizeAs < matlab.unittest.constraints.Constraint
    properties (SetAccess=immutable)
        ValueWithExpectedSize
    end

    methods
        function constraint = IsSameSizeAs(value)
            constraint.ValueWithExpectedSize = value;
        end

        function tf = satisfiedBy(constraint,actual)
            tf = constraint.sizeMatchesExpected(actual);
        end

        function diagnostic = getDiagnosticFor(constraint,actual)
            if constraint.sizeMatchesExpected(actual)
                diagnostic = diagnosticForPassingTest;
            else
                diagnostic = diagnosticForFailingTest(constraint,actual);
            end
        end
    end

    methods (Access=private)
        function tf = sizeMatchesExpected(constraint,actual)
            tf = isequal(size(actual), ...
                size(constraint.ValueWithExpectedSize));
        end

        function diag = diagnosticForPassingTest(~,~)
            import matlab.unittest.diagnostics.ConstraintDiagnostic
            diag = ConstraintDiagnostic;
            
            diag.DisplayDescription = true;
            diag.Description = "IsSameSizeAs passed.";
        end

        function diag = diagnosticForFailingTest(constraint,actual)
            import matlab.unittest.diagnostics.ConstraintDiagnostic
            diag = ConstraintDiagnostic;
            
            diag.DisplayDescription = true;
            diag.Description = "IsSameSizeAs failed.";

            diag.DisplayConditions = true;
            diag.addCondition("Sizes did not match.")

            diag.DisplayActVal = true;
            diag.ActValHeader = "Actual Size:";
            diag.ActVal = size(actual);

            diag.DisplayExpVal = true;
            diag.ExpValHeader = "Expected Size:";
            diag.ExpVal = size(constraint.ValueWithExpectedSize);
        end
    end
end

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

testCase = matlab.unittest.TestCase.forInteractiveUse;

测试一个失败的用例。框架显示在 diagnosticForFailingTest 辅助方法中实现的约束诊断。

testCase.verifyThat(zeros(5),IsSameSizeAs(ones(1,5)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsSameSizeAs failed.
    --> Sizes did not match.
    
    Actual Size:
         5     5
    Expected Size:
         1     5

创建一个约束诊断,它在诊断的描述字段之前注入文本。

在当前文件夹中的一个文件中,创建名为 CustomConstraintDiagnostic 的类,该类派生自 matlab.unittest.diagnostics.ConstraintDiagnostic 类。实现自定义诊断类从其超类继承的 getPreDescriptionString 方法,以在诊断的可选描述字段之前插入文本。

classdef CustomConstraintDiagnostic < ...
        matlab.unittest.diagnostics.ConstraintDiagnostic
    properties (SetAccess=immutable)
        Context
    end

    methods
        function diag = CustomConstraintDiagnostic(context)
            arguments
                context (1,1) string = "Test Outcome Information"
            end
            diag.Context = context;
        end
    end

    methods (Access=protected)
        function str = getPreDescriptionString(diag)
            str = diag.Context;
        end
    end
end

导入此示例中使用的类。

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo

通过实例化 CustomConstraintDiagnostic 类来创建一个约束诊断。

diagnostic = CustomConstraintDiagnostic;
diagnostic.DisplayDescription = true;
diagnostic.Description = "My Custom Diagnostic";

在实践中,您通常使用约束诊断来实现自定义约束。为了简化此示例,请为交互式测试创建一个测试用例,并通过使用 CustomConstraintDiagnostic 对象在测试失败时显示诊断信息。框架既显示指定的描述,也显示在描述之前注入的默认文本。

testCase = TestCase.forInteractiveUse;
testCase.verifyThat(1,IsEqualTo(2),diagnostic)
Verification failed.
    ----------------
    Test Diagnostic:
    ----------------
    Test Outcome Information
    My Custom Diagnostic
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> Failure table:
                Actual    Expected    Error    RelativeError
                ______    ________    _____    _____________
                                                            
                  1          2         -1          -0.5     
        
        Actual Value:
             1
        Expected Value:
             2

详细信息

全部展开

版本历史记录

在 R2013a 中推出