matlab.test.behavior.Missing 类
包: matlab.test.behavior
超类: matlab.unittest.TestCase
说明
要测试类的 missing
值是否满足 MATLAB® 中的缺失值契约,请创建一个派生自 matlab.test.behavior.Missing
类的测试类。如果您的类表示一种数据类型,并且您要 MATLAB 对该类的 missing
值的处理方式类似于内置类,请确保您的类满足 missing
契约。
通常,您将行为测试用作测试驱动的开发工作流的一部分。如果希望类的缺失值满足 MATLAB 中的缺失值契约,请编写行为测试并修改待测类,直到测试结果符合您的预期。例如,如果您的类支持比较和排序,并且可用作缺失值指示符,则所有测试都应该通过。如果您的类不支持排序,请将 SupportsOrdering
属性设置为 false
,MATLAB 应该会滤除与排序相关的测试。
您的行为测试只能从 matlab.test.behavior.Missing
派生并且必须定义 abstract 属性。但是,由于 matlab.test.behavior.Missing
是 matlab.unittest.TestCase
的子类,因此您可以使用单元测试框架的功能。
属性
在测试类的 properties
块中定义所有 abstract
属性的值。
MissingValue
— 待测类的缺失值
有效 MATLAB 标量值 | 返回非缺失值的表达式
待测类的缺失值,指定为有效的 MATLAB 标量值或返回非缺失值的表达式。
示例: NaN
或 missing
或 ' '
属性:
SetAccess | public |
GetAccess | public |
Abstract | true |
PrototypeValue
— 待测类的非缺失值
有效 MATLAB 标量值 | 返回非缺失值的表达式
待测类的任何非缺失值,指定为有效的 MATLAB 标量值或返回非缺失值的表达式。通常,如果类构造函数返回非缺失值,则 PrototypeValue
是对构造函数的调用。
示例: 0 或 datetime
属性:
SetAccess | public |
GetAccess | public |
Abstract | true |
ClassesWithSupportedConversions
— 可转换为待测类的类
由类名称组成的字符串数组
可转换为待测类的类的列表,指定为类名的字符串数组。
如果您可以转换为其他类,然后转换回您的类,则您的类支持从其他类转换。例如,如果 MyClass(OtherClass(missing)) == MyClass(missing)
,则 OtherClass
是支持转换的类。
示例: "string"
或 ["double","single"]
属性:
SetAccess | public |
GetAccess | public |
Abstract | true |
数据类型: string
如有必要,请在您的测试类的 TestClassSetup
方法块中重新定义函数中具体属性的值。
SupportsComparison
— 类支持比较
true
(默认) | false
类支持比较的指示符,指定为 true
或 false
。支持比较的类允许使用 ==
和 ~=
。
如果将 SupportsComparison
设置为 false
,则假设失败应该会滤除比较和排序测试。MATLAB 不运行这些测试。
属性:
SetAccess | protected |
GetAccess | public |
数据类型: logical
SupportsOrdering
— 用于控制 <、> 等运行的逻辑标量
true
(默认) | false
类支持排序的指示符,指定为 true
或 false
。支持排序的类允许使用 <
、>
、<=
和 >=
。
如果将 SupportsOrdering
设置为 false
,则假设失败时会滤除相关联的测试。MATLAB 不会运行这些测试。
属性:
SetAccess | protected |
GetAccess | public |
数据类型: logical
UsableAsMissingIndicator
— 类可用作缺失值指示符
true
(默认) | false
指示类可用作 ismissing
函数的缺失值的指示符,指定为 true
或 false
。
如果将 UsableAsMissingIndicator
设置为 false
,则假设失败时会滤除相关联的测试。MATLAB 不会运行这些测试。
属性:
SetAccess | protected |
GetAccess | public |
数据类型: logical
FillValue
— 增大数组的值
MissingValue
属性的值 (默认) | 有效 MATLAB 标量值
类用于增大数组的填充值,指定为有效的 MATLAB 标量值。默认情况下,FillValue
的值与 MissingValue
属性的值相同。
示例: 0
属性:
SetAccess | protected |
GetAccess | public |
示例
验证类满足缺失值契约
创建可包含缺失值的 MyDataClass
类。该类支持比较和排序,缺失值实现应满足 MATLAB 中的缺失值契约。如果在没有输入的情况下调用构造函数,则返回缺失值。
classdef MyDataClass properties SomeData; MissingVal = false; end methods function obj = MyDataClass(value) if nargin m = size(value,1); n = size(value,2); for i = 1:m for j = 1:n if ismissing(value(i,j)) obj(i,j).MissingVal = true; else obj(i,j).SomeData = value(i,j); obj(i,j).MissingVal = false; end end end else obj.MissingVal = true; end end % Define ismissing behavior function m = ismissing(obj,v) if nargin > 1 m = isequaln(obj,v); else m = [obj.MissingVal]; end m = reshape(m,size(obj)); end end end
要创建一个简单测试类来检查 MyDataClass
是否满足缺失值契约,请子类化 matlab.test.behavior.Missing
。测试可以使用单元测试框架的功能,但 MissingValueTest
仅检查缺失值契约。
classdef MissingValueTest < matlab.test.behavior.Missing properties MissingValue = MyDataClass; PrototypeValue = MyDataClass(7); ClassesWithSupportedConversions = []; end end
运行测试并查看结果。用于比较、排序、检测相等性以及使用 MyDataClass
作为 ismissing
的第二个输入的测试失败。
results = runtests('MissingValueTest');
Running MissingValueTest .... ================================================================================ Error occurred in MissingValueTest/comparison and it did not run to completion. --------- Error ID: --------- 'MATLAB:UndefinedFunction' -------------- Error Details: -------------- Undefined function 'eq' for input arguments of type 'MyDataClass'. Error in matlab.test.behavior.Missing/comparison (line 129) testCase.verifyFalse(testCase.MissingValue == testCase.MissingValue, getString(message('MATLAB:test:behavior:missing:EqualFalse'))); ================================================================================ . ================================================================================ Error occurred in MissingValueTest/ordering and it did not run to completion. --------- Error ID: --------- 'MATLAB:UndefinedFunction' -------------- Error Details: -------------- Undefined function 'lt' for input arguments of type 'MyDataClass'. Error in matlab.test.behavior.Missing/ordering (line 136) testCase.verifyFalse(testCase.MissingValue < testCase.MissingValue, getString(message('MATLAB:test:behavior:missing:LessThanFalse'))); ================================================================================ . ================================================================================ Verification failed in MissingValueTest/isequalRules. ---------------- Test Diagnostic: ---------------- isequal(MissingValue, MissingValue) must return false, because all missing values are unequal. --------------------- Framework Diagnostic: --------------------- verifyFalse failed. --> The value must evaluate to "false". Actual Value: logical 1 ------------------ Stack Information: ------------------ In <matlabroot>\toolbox\matlab\datatypes\+matlab\+test\+behavior\Missing.m (Missing.isequalRules) at 145 ================================================================================ ================================================================================ Verification failed in MissingValueTest/isequalRules. ---------------- Test Diagnostic: ---------------- isequaln(MissingValue, missing) must return true. --------------------- Framework Diagnostic: --------------------- verifyTrue failed. --> The value must evaluate to "true". Actual Value: logical 0 ------------------ Stack Information: ------------------ In <matlabroot>\toolbox\matlab\datatypes\+matlab\+test\+behavior\Missing.m (Missing.isequalRules) at 147 ================================================================================ . ================================================================================ Verification failed in MissingValueTest/IsMissing2ndInput. ---------------- Test Diagnostic: ---------------- ismissing(MissingValue, missing) must return true. --------------------- Framework Diagnostic: --------------------- verifyTrue failed. --> The value must evaluate to "true". Actual Value: logical 0 ------------------ Stack Information: ------------------ In <matlabroot>\toolbox\matlab\datatypes\+matlab\+test\+behavior\Missing.m (Missing.IsMissing2ndInput) at 154 ================================================================================ ... Done MissingValueTest __________ Failure Summary: Name Failed Incomplete Reason(s) ================================================================================= MissingValueTest/comparison X X Errored. --------------------------------------------------------------------------------- MissingValueTest/ordering X X Errored. --------------------------------------------------------------------------------- MissingValueTest/isequalRules X Failed by verification. --------------------------------------------------------------------------------- MissingValueTest/IsMissing2ndInput X Failed by verification.
以迭代方式更新 MyDataClass
以满足缺失值契约。要满足比较和排序,请在 MyDataClass
的 methods
块中定义 eq
、ne
、lt
、gt
、le
和 ge
。
% Class supports comparison function tf = eq(obj1,obj2) tf = ~any(ismissing([obj1 obj2])) && eq(obj1.SomeData,obj2.SomeData); end function tf = ne(obj1,obj2) tf = ~eq(obj1,obj2); end % Class supports ordering function tf = lt(obj1,obj2) tf = ~any(ismissing([obj1 obj2])) && lt(obj1.SomeData,obj2.SomeData); end function tf = gt(obj1,obj2) tf = lt(obj2,obj1); end function tf = le(obj1,obj2) tf = ~any(ismissing([obj1 obj2])) && ~gt(obj1,obj2); end function tf = ge(obj1,obj2) tf = le(obj2,obj1); end
使用简洁级别输出详细信息运行测试并查看结果。
results = runtests('MissingValueTest','OutputDetail',1);
...... FAIL: MissingValueTest/isequalRules in Missing.isequalRules at 145 :: verifyFalse failed. FAIL: MissingValueTest/isequalRules in Missing.isequalRules at 147 :: verifyTrue failed. . FAIL: MissingValueTest/IsMissing2ndInput in Missing.IsMissing2ndInput at 154 :: verifyTrue failed. ...
以迭代方式更新 MyDataClass
以满足相等性规则。在 MyDataClass
的 methods
块中定义 isqual
和 isequaln
。
% Class supports isequal/isequaln rules function tf = isequal(obj1,obj2) tf = eq(obj1,obj2); end function tf = isequaln(obj1,obj2) tf = all(ismissing([obj1 obj2])) || eq(obj1,obj2); end
运行测试并查看结果。测试通过,MyDataClass
满足缺失值契约。
results = runtests('MissingValueTest');
Running MissingValueTest .......... Done MissingValueTest __________
详细信息
契约详细信息
行为测试断言以下条件为 true。
MissingValue
属性中的缺失值与PrototypeValue
属性中的值的类相同。MissingValue
和PrototypeValue
值是标量。使用
MissingValue
值调用的ismissing
函数返回true
。使用
PrototypeValue
值调用的ismissing
函数返回false
。
行为测试验证将缺失值转换为类的实例所返回的值与 MissingValue
属性相同。
此外,对于您的类可以转换的每个类,行为测试将验证缺失值的转换。例如,如果可以在 OtherClass
和 MyClass
之间进行转换,则行为测试将验证 MyClass(OtherClass(missing)) == MyClass(missing)
。ClassesWithSupportedConversions
属性指示您的哪些类可以转换。
给定类的对象的数组,下标赋值测试验证您可以使用缺失值扩展数组,并将缺失值赋给数组中的一系列元素。
串联测试验证您的类的对象的数组可以与缺失值串联。
相等性测试验证 isequal
对两个缺失值返回 false
,isequaln
对两个缺失值返回 true
。
SupportsComparison
默认情况下,行为测试假定您的类支持值的比较,包括缺失值。比较测试验证您已按照 MATLAB 的预期对缺失值实现 ==
和 ~=
。
使用
==
对两个缺失值进行比较返回false
。使用
~=
对两个缺失值进行比较返回true
。
如果您的类不支持比较,请将 SupportsComparison
属性设置为 false
,以使 MATLAB 不运行这些测试。在这种情况下,比较测试会作为假设失败被滤除。此外,如果 SupportsComparison = false
,MATLAB 不运行排序测试。
SupportsOrdering
默认情况下,行为测试假定您的类支持值的排序,包括缺失值。排序测试验证您已按照 MATLAB 的预期对缺失值实现 <
、>
、<=
和 >=
。对于缺失值,MATLAB 预期所有排序操作返回 false
。
如果您的类支持排序,为了满足行为契约,它还必须支持比较。如果 SupportsComparison = false
,MATLAB 不运行排序测试或比较测试。在这种情况下,排序测试被标记为假设失败(滤除的测试)。
如果您的类不支持排序,请将 SupportsOrdering
属性设置为 false
,以使 MATLAB 不运行这些测试。在这种情况下,排序测试被标记为假设失败(滤除的测试)。
UsableAsMissingIndicator
默认情况下,行为测试假定您的类的实例可以用作 ismissing
函数的可选输入参数,作为缺失值指示符。
如果您的类不能作为缺失值指示符,请将 UsableAsMissingIndicator
属性设置为 false
,以使 MATLAB 不运行这些测试。在这种情况下,排序测试被标记为假设失败(滤除的测试)。
FillValue
行为测试验证当 MATLAB 增长类的元素的数组时,新元素具有 FillValue
属性指定的值。默认情况下,FillValue
属性与 MissingValue
属性相同。但是,您可以为 FillValue
指定不同值。
版本历史记录
在 R2018b 中推出
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)