Main Content

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

matlab.unittest.constraints.IssuesWarnings 类

命名空间: matlab.unittest.constraints
超类: matlab.unittest.constraints.Constraint

限定函数发出预期警告配置文件的约束

描述

IssuesWarnings 类创建一个约束,用于发出预期警告。仅当实际值是发出一组特定警告的函数句柄时,才满足该约束。使用警告标识符指定警告。

默认情况下,该约束仅确认,当测试框架调用函数句柄时,MATLAB® 将发出一组指定的警告。它忽略发出这些警告的次数、发出这些警告的顺序,以及是否发出任何未指定的警告。但是,您可以将参数设置为遵循相应排序、计数和警告组。您也可以指定精确警告模式来进行比较。

构造

outConstObj = IssuesWarnings(warnArr) 创建约束 outConstObj,限定函数发出预期警告 warnArr

outConstObj = IssuesWarnings(expVal,Name,Value) 创建一个约束,其中通过一个或多个 Name,Value 对组参数指定其他选项。Name 必须位于单引号 ('') 内。您可采用任意顺序指定多个名称-值对组参数,例如 Name1,Value1,...,NameN,ValueN

输入参数

warnArr

当测试框架调用函数句柄时预期的警告标识符,指定为由警告标识符构成的元胞数组。如果 warnArr 为空,则构造函数将引发 MException

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

Exactly

指示值是否为发出精确匹配警告模式的函数句柄的指示符,指定为 falsetruelogical 01)。如果此值为 false,则该实例依赖其他参数的说明和默认实例行为才能确定其比较的严格程度。当设置为 true 时,该实例要求警告模式与指定的警告模式完全相同。

默认: false

RespectingCount

指示是否考虑元素计数的指示符,指定为 falsetruelogical 01)。当此值为 false 时,该实例不考虑成员出现次数并将忽略其频数。当设置为 true 时,该实例会将集成员总数考虑在内。这意味着,除了确保发出指定的所有警告外,如果特定警告的发出次数不同于 warnArr 中指定的警告的次数,将不满足该实例。

默认: false

RespectingOrder

指示是否遵守元素顺序的指示符,指定为 falsetruelogical 01)。当此值为 false 时,该实例对集成员的顺序不敏感。当设置为 true 时,该实例对集成员顺序敏感。这意味着,如果发出的警告的顺序不同于 warnArr 中指定的警告的顺序,将不满足该实例。

给定警告集的顺序通过将警告模式删减为没有任何重复邻接警告的模式来确定。例如,警告模式 {id:A, id:A, id:B, id:C, id:C, id:C, id:A, id:A, id:A} 删减为 {id:A, id:B, id:C, id:A}

当此约束遵守顺序时,发出的预期警告顺序必须与警告模式的预期顺序匹配。在确定顺序时将忽略未列在 warnArr 中的发出的警告。

默认: false

RespectingSet

指示是否考虑集元素的指示符,指定为 falsetruelogical 01)。当此值为 false 时,该实例将忽略其他集成员。当设置为 true 时,该实例会考虑其他集成员。这意味着,除了确保发出所有指定警告外,如果发出任何额外未指定的警告,将不满足该实例。

默认: false

WhenNargoutIs

调用函数句柄时约束应请求的输出数量,指定为非负数、实数、整数标量。

默认: 0

属性

Exact

指示约束是否执行精确比较的指示符。此属性由构造函数通过名称-值对组参数 'Exactly' 设置。

ExpectedWarnings

预期警告标识符。此只读属性由构造函数通过 warnArr 输入参数进行设置。

FunctionOutputs

在调用提供的函数句柄时生成的输出参数,指定为元胞数组。此属性提供对输出参数的访问。该属性是只读的,测试框架在调用函数句柄时将对其进行设置。输出数量由 Nargout 属性确定。

Nargout

该实例在执行函数时使用的输出参数数量。此属性由构造函数通过名称-值对组参数 'WhenNargoutIs' 设置。

RespectCount

指示此约束是否遵守元素计数的指示符,通过构造函数和名称-值对组参数 'RespectingCount' 指定。

RespectOrder

指示此约束是否遵守元素顺序的指示符,通过构造函数和名称-值对组参数 'RespectingOrder' 指定。

RespectSet

指示此约束是否遵守集元素的指示符,通过构造函数和名称-值对组参数 'RespectingSet' 指定。

复制语义

句柄。要了解句柄类如何影响复制操作,请参阅复制对象

示例

全部折叠

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

import matlab.unittest.TestCase
import matlab.unittest.constraints.IssuesWarnings

testCase = TestCase.forInteractiveUse;

创建一个要在此示例中使用的匿名辅助函数。创建多个警告标识符。

issueWarnings = @(idCell) cellfun(@(id) warning(id,'Message'), idCell);
firstID =   'first:id';
secondID =  'second:id';
thirdID =   'third:id';

验证辅助函数是否发出特定的警告。

testCase.verifyThat(@() issueWarnings({firstID}),...
    IssuesWarnings({firstID}))
Interactive verification passed.

验证函数是否发出警告并计数、警告集和顺序。

testCase.verifyThat(@() issueWarnings({firstID, thirdID, secondID,...
    firstID}), IssuesWarnings({secondID, firstID}))
Interactive verification passed.

验证函数是否发出警告同时遵循警告集。

testCase.verifyThat(@() issueWarnings({firstID, thirdID, secondID,...
    firstID}), IssuesWarnings({firstID, secondID, thirdID}, ...
    'RespectingSet', true))
Interactive verification passed.

验证函数是否发出警告同时遵循警告计数。

testCase.verifyThat(@() issueWarnings({secondID, firstID, thirdID,...
    secondID}), IssuesWarnings({firstID, secondID, secondID}, ...
    'RespectingCount', true))
Interactive verification passed.

验证函数是否发出警告同时遵循警告顺序。

testCase.verifyThat(@() issueWarnings({firstID, secondID, secondID,...
    thirdID}), IssuesWarnings({firstID, secondID}, 'RespectingOrder', true))
Interactive verification passed.

验证函数是否发出预期警告模式的完全匹配项。

testCase.verifyThat(@() issueWarnings({firstID, secondID, secondID,...
    thirdID}), IssuesWarnings({firstID, secondID, secondID, thirdID}, ...
    'Exactly', true))
Interactive verification passed.

确认如果实际值不是函数句柄,则不满足该约束。

testCase.verifyThat(5, IssuesWarnings({firstID}))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IssuesWarnings failed.
--> The value must be an instance of the expected type.
    
    Actual Class:
        double
    Expected Type:
        function_handle

Actual Value:
         5

确认如果函数未发出警告,则不满足该约束。

testCase.verifyThat(@rand, IssuesWarnings({firstID}))
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IssuesWarnings failed.
--> The function handle did not issue a correct warning profile.
    The expected warning profile ignores:
      Set
      Count
      Order
    --> The function handle did not issue any warnings.
    
    Expected Warning Profile:
        --> 'first:id'

Evaluated Function:
        @rand

确认如果函数发出未指定的警告标识符,则不满足该约束。

testCase.verifyThat(@() issueWarnings({firstID}), IssuesWarnings({secondID}))
Warning: Message 
> In @(id)warning(id,'Message')
  In @(idCell)cellfun(@(id)warning(id,'Message'),idCell)
  In @()issueWarnings({firstID})
  In matlab.unittest.internal.constraints.FunctionHandleConstraint/invoke (line 36)
  In matlab.unittest.internal.constraints.WarningQualificationConstraint/invoke (line 39)
  In matlab.unittest.constraints.IssuesWarnings/invoke (line 431)
  In matlab.unittest.constraints.IssuesWarnings/invokeCapturingOutput (line 510)
  In matlab.unittest.constraints.IssuesWarnings/issuesExpectedWarnings (line 519)
  In matlab.unittest.constraints.IssuesWarnings/satisfiedBy (line 239)
  In matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 62)
  In matlab.unittest.qualifications.Verifiable/verifyThat (line 228) 
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IssuesWarnings failed.
--> The function handle did not issue a correct warning profile.
    The expected warning profile ignores:
      Set
      Count
      Order
    --> The function handle did not issue the correct warnings.
        
        Missing Warnings:
            --> 'second:id'
    
    Actual Warning Profile:
        --> 'first:id'
    Expected Warning Profile:
        --> 'second:id'

Evaluated Function:
        @()issueWarnings({firstID})

考虑以下实际值和警告数组。

actVal = @() issueWarnings({firstID, firstID, secondID, firstID});
warnArr = {firstID, secondID, firstID, firstID};

测试警告数组是否与预期数组完全相同。

testCase.verifyThat(actVal, IssuesWarnings(warnArr, 'Exactly', true))
Warning: Message 
> In @(id)warning(id,'Message')
  In @(idCell)cellfun(@(id)warning(id,'Message'),idCell)
  In @()issueWarnings({firstID,firstID,secondID,firstID})
  In matlab.unittest.internal.constraints.FunctionHandleConstraint/invoke (line 36)
  In matlab.unittest.internal.constraints.WarningQualificationConstraint/invoke (line 39)
  In matlab.unittest.constraints.IssuesWarnings/invoke (line 431)
  In matlab.unittest.constraints.IssuesWarnings/invokeCapturingOutput (line 510)
  In matlab.unittest.constraints.IssuesWarnings/issuesExpectedWarnings (line 519)
  In matlab.unittest.constraints.IssuesWarnings/satisfiedBy (line 239)
  In matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 62)
  In matlab.unittest.qualifications.Verifiable/verifyThat (line 228) 
Warning: Message 
> In @(id)warning(id,'Message')
  In @(idCell)cellfun(@(id)warning(id,'Message'),idCell)
  In @()issueWarnings({firstID,firstID,secondID,firstID})
  In matlab.unittest.internal.constraints.FunctionHandleConstraint/invoke (line 36)
  In matlab.unittest.internal.constraints.WarningQualificationConstraint/invoke (line 39)
  In matlab.unittest.constraints.IssuesWarnings/invoke (line 431)
  In matlab.unittest.constraints.IssuesWarnings/invokeCapturingOutput (line 510)
  In matlab.unittest.constraints.IssuesWarnings/issuesExpectedWarnings (line 519)
  In matlab.unittest.constraints.IssuesWarnings/satisfiedBy (line 239)
  In matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 62)
  In matlab.unittest.qualifications.Verifiable/verifyThat (line 228) 
Warning: Message 
> In @(id)warning(id,'Message')
  In @(idCell)cellfun(@(id)warning(id,'Message'),idCell)
  In @()issueWarnings({firstID,firstID,secondID,firstID})
  In matlab.unittest.internal.constraints.FunctionHandleConstraint/invoke (line 36)
  In matlab.unittest.internal.constraints.WarningQualificationConstraint/invoke (line 39)
  In matlab.unittest.constraints.IssuesWarnings/invoke (line 431)
  In matlab.unittest.constraints.IssuesWarnings/invokeCapturingOutput (line 510)
  In matlab.unittest.constraints.IssuesWarnings/issuesExpectedWarnings (line 519)
  In matlab.unittest.constraints.IssuesWarnings/satisfiedBy (line 239)
  In matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 62)
  In matlab.unittest.qualifications.Verifiable/verifyThat (line 228) 
Warning: Message 
> In @(id)warning(id,'Message')
  In @(idCell)cellfun(@(id)warning(id,'Message'),idCell)
  In @()issueWarnings({firstID,firstID,secondID,firstID})
  In matlab.unittest.internal.constraints.FunctionHandleConstraint/invoke (line 36)
  In matlab.unittest.internal.constraints.WarningQualificationConstraint/invoke (line 39)
  In matlab.unittest.constraints.IssuesWarnings/invoke (line 431)
  In matlab.unittest.constraints.IssuesWarnings/invokeCapturingOutput (line 510)
  In matlab.unittest.constraints.IssuesWarnings/issuesExpectedWarnings (line 519)
  In matlab.unittest.constraints.IssuesWarnings/satisfiedBy (line 239)
  In matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 62)
  In matlab.unittest.qualifications.Verifiable/verifyThat (line 228) 
Interactive verification failed.

---------------------
Framework Diagnostic:
---------------------
IssuesWarnings failed.
--> The function handle did not issue a correct warning profile.
    The expected warning profile must match exactly.
    --> The function handle did not issue the exact warning profile expected.
    
    Actual Warning Profile:
        --> 'first:id'
        --> 'first:id'
        --> 'second:id'
        --> 'first:id'
    Expected Warning Profile:
        --> 'first:id'
        --> 'second:id'
        --> 'first:id'
        --> 'first:id'

Evaluated Function:
        @()issueWarnings({firstID,firstID,secondID,firstID})

测试当遵循集、顺序和计数时警告数组是否与预期数组相同。

testCase.verifyThat(actVal, IssuesWarnings(warnArr,...
    'RespectingSet',true,'RespectingOrder',true,'RespectingCount',true))
Interactive verification passed.

在此示例中,指定警告模式遵循组、排序和计数的约束与指定确切警告模式的约束不同。