matlab.test.behavior.Missing クラス
名前空間: matlab.test.behavior
スーパークラス: matlab.unittest.TestCase
クラスが欠損値のコントラクトを満たすかどうかをテストする
説明
クラスの欠損値が MATLAB® の欠損コントラクトを満たすかどうかテストするには、matlab.test.behavior.Missing
クラスから派生させたテスト クラスを作成します。クラスがデータ型を表しており、MATLAB において、クラスの欠損値を組み込みクラスと同様に扱いたい場合、クラスが欠損コントラクトを満たしていることを確認してください。
通常、この動作テストは、テスト駆動型開発ワークフローの一部として使用します。クラスの欠損値が MATLAB の欠損コントラクトを満たすようにする場合、動作テストを記述して、テストにパスするまでテスト対象のクラスを変更します。たとえば、クラスが比較と順序付けをサポートし、欠損値インジケーターとして使用できる場合、すべてのテストがパスするばずです。クラスが順序付けをサポートしない場合、SupportsOrdering
プロパティを false
に設定します。これにより、順序付けに関連付けられたテストが MATLAB によって除外されます。
動作テストは matlab.test.behavior.Missing
からのみ派生し、抽象プロパティを定義しなければなりません。ただし、matlab.test.behavior.Missing
は matlab.unittest.TestCase
のサブクラスであるため、ユニット テスト フレームワークの機能を使用できます。
プロパティ
テスト クラスの properties
ブロックに含まれるすべての抽象プロパティの値を定義します。
MissingValue
— テスト対象クラスの欠損値
有効な MATLAB スカラー値 | 欠損値を返す式
テスト対象クラスの欠損値。有効な MATLAB スカラー値または欠損値を返す式として指定します。
例: NaN
例: missing
例: ' '
属性:
SetAccess | public |
GetAccess | public |
抽象型 | true |
PrototypeValue
— テスト対象クラスの非欠損値
有効な MATLAB スカラー値 | 非欠損値を返す式
テスト対象クラスの非欠損値。有効な MATLAB スカラー値または非欠損値を返す式として指定します。通常、クラス コンストラクターが非欠損値を返す場合、PrototypeValue
はコンストラクターの呼び出しです。
例: 0
例: datetime
属性:
SetAccess | public |
GetAccess | public |
抽象型 | true |
ClassesWithSupportedConversions
— テスト対象クラスに変換できるクラス
クラス名の string ベクトル
テスト対象クラスに変換できるクラス。クラス名の string ベクトルとして指定します。
クラスを他のクラスに変換してから元のクラスに戻すことができる場合、その元のクラスでは他のクラスからの変換がサポートされています。たとえば、MyClass(OtherClass(missing)) == MyClass(missing)
である場合、OtherClass
は変換がサポートされているクラスです。
例: "string"
例: ["double" "single"]
属性:
SetAccess | public |
GetAccess | public |
抽象型 | true |
必要に応じて、テスト クラスの TestClassSetup
methods
ブロックで、具象プロパティの値を再定義します。
SupportsComparison
— クラスで比較がサポートされるかどうか
1
(既定値) | 0
クラスで比較がサポートされるかどうか。データ型 logical
の 1
または 0
として返されます。比較がサポートされるクラスでは、==
および ~=
を使用できます。
SupportsComparison
を false
に設定した場合、MATLAB は仮定エラーによって比較と順序付けのテストをフィルターで除外します。MATLAB ではテストが実行されません。
属性:
SetAccess | protected |
GetAccess | public |
SupportsOrdering
— クラスで順序付けがサポートされるかどうか
1
(既定値) | 0
クラスで順序付けがサポートされるかどうか。データ型 logical
の 1
または 0
として返されます。順序付けがサポートされるクラスでは、<
、>
、<=
、および >=
を使用できます。
SupportsOrdering
を false
に設定した場合、MATLAB は仮定エラーによって順序付けのテストをフィルターで除外します。MATLAB ではテストが実行されません。
属性:
SetAccess | protected |
GetAccess | public |
UsableAsMissingIndicator
— クラスが欠損値インジケーターとして使用可能かどうか
1
(既定値) | 0
クラスが関数 ismissing
で欠損値インジケーターとして使用可能かどうか。データ型 logical
の 1
または 0
として返されます。
UsableAsMissingIndicator
を false
に設定した場合、MATLAB は仮定エラーによって関連付けられているテストをフィルターで除外します。MATLAB ではテストが実行されません。
属性:
SetAccess | protected |
GetAccess | public |
FillValue
— 増加する配列の埋め込み値
MissingValue
プロパティの値 (既定値) | 有効な MATLAB スカラー値
増加する配列に対してクラスが使用する埋め込み値。MATLAB スカラー値として返されます。既定では、FillValue
の値は MissingValue
プロパティの値と同じです。
例: 0
属性:
SetAccess | protected |
GetAccess | public |
ExtraConstructorArguments
— 非互換の値になるクラス コンストラクターの引数
{}
(既定値) | cell ベクトル
R2023b 以降
非互換の値になるクラス コンストラクターの引数。cell ベクトルとして返されます。テスト対象クラスに該当するコンストラクターの引数がある場合、このプロパティを使用します。たとえば、datetime
クラスでは、クラス コンストラクターの名前と値の引数 TimeZone
が指定されているかどうかに対応する 2 つのカテゴリ (ゾーン付きの値とゾーンなしの値) がサポートされています。これらの値は非互換です。たとえば、ゾーン付きの値とゾーンなしの値の連結や比較はできません。非互換の値になる引数についてテストするには、ExtraConstructorArguments
プロパティを設定します。
ExtraConstructorArguments
プロパティを設定すると、MissingValue
プロパティおよび PrototypeValue
プロパティに割り当てる値では、ExtraConstructorArguments
に指定されている引数を使用する必要があります。ExtraConstructorArguments
プロパティを使用してテストする方法の例については、datetime クラスの動作テストの作成を参照してください。
例: {"TimeZone","Asia/Tokyo"}
属性:
SetAccess | protected |
GetAccess | public |
例
クラスが欠損値コントラクトを満たすことを検証
現在のフォルダー内に、欠損値をサポートする MyDataClass
という名前のクラスを作成します。入力を指定せずにコンストラクターを呼び出すと、欠損値が返されます。
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
テストを実行し、結果を確認します。比較、順序付け、等価性、および ismissing
への 2 番目の入力としての MyDataClass
の使用に関するテストは失敗します。
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. ...
等価性ルールを満たし、関数 ismissing
の 2 番目の入力として受け入れられるように、MyDataClass
を繰り返し更新します。MyDataClass
の methods
ブロックで isequal
と 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 __________
datetime
クラスの動作テストの作成
datetime
クラスがゾーン付きとゾーンなしの両方の datetime
値について MATLAB の欠損コントラクトを満たしていることを確認するテストを作成します。ゾーン付きの datetime
値とは、作成時に名前と値の引数 TimeZone
を指定して作成した値です。この例は説明のみを目的としています。実際には、ユーザー定義のクラスをテストします。
現在のフォルダーで、matlab.test.behavior.Missing
のサブクラス化を行って MissingDatetimeTest
テスト クラスを作成します。そのクラスが properties
ブロックで継承する抽象プロパティを定義します。なお、MissingDatetimeTest
クラスにはゾーンなしの datetime
値 (つまり、datetime
と NaT
) が含まれています。
classdef MissingDatetimeTest < matlab.test.behavior.Missing properties MissingValue = NaT PrototypeValue = datetime ClassesWithSupportedConversions = "string" end end
MissingDatetimeTest
テスト クラスを実行します。テストにパスします。これは、datetime
クラスがゾーンなしの datetime
値に関する欠損コントラクトを満たしていることを示しています。
runtests("MissingDatetimeTest");
Running MissingDatetimeTest .......... Done MissingDatetimeTest __________
名前と値の引数 TimeZone
を使用して作成した datetime
値は、ゾーンなしの値と非互換です。たとえば、ゾーン付きとゾーンなしの datetime
値を連結することはできません。コンストラクターの引数 TimeZone
によって非互換の値が生じるため、datetime
クラスがゾーン付きの値に関する欠損コントラクトも満たすことを確認する別の動作テストを作成します。現在のフォルダーで、matlab.test.behavior.Missing
のサブクラス化を行って ZonedMissingDatetimeTest
テスト クラスを作成します。抽象プロパティを定義し、TestClassSetup
methods
ブロックの ExtraConstructorArguments
プロパティを設定することで、テスト対象のコンストラクターの引数をさらに指定します。MissingValue
プロパティおよび PrototypeValue
プロパティに割り当てる値では、ExtraConstructorArguments
に指定されている名前と値の引数を使用する必要があります。
classdef ZonedMissingDatetimeTest < matlab.test.behavior.Missing properties MissingValue = NaT(TimeZone="Asia/Tokyo") PrototypeValue = datetime(2023,6,23,TimeZone="Asia/Tokyo") ClassesWithSupportedConversions = "string" end methods (TestClassSetup) function zonedDatetimeConstructorArgs(testCase) testCase.ExtraConstructorArguments = {"TimeZone","Asia/Tokyo"}; end end end
ZonedMissingDatetimeTest
テスト クラスを実行します。テストにパスします。これは、datetime
クラスがゾーン付きの datetime
値に関する欠損コントラクトも満たしていることを示しています。
runtests("ZonedMissingDatetimeTest");
Running ZonedMissingDatetimeTest .......... Done ZonedMissingDatetimeTest __________
詳細
欠損値のコントラクトの詳細
動作テストは、次の条件が true であることをアサートします。
MissingValue
プロパティの欠損値は、PrototypeValue
プロパティの値と同じクラスです。MissingValue
とPrototypeValue
の値はスカラーです。MissingValue
の値を指定して呼び出される関数ismissing
はtrue
を返します。PrototypeValue
の値を指定して呼び出される関数ismissing
はfalse
を返します。
動作テストでは、欠損値をクラスのインスタンスに変換すると MissingValue
プロパティと同じ値が返されることを検証します。
さらに、クラスを変換できる各クラスについて、動作テストでは欠損値の変換を検証します。たとえば、OtherClass
と MyClass
の間で変換できる場合、動作テストでは MyClass(OtherClass(missing)) == MyClass(missing)
であることを検証します。ClassesWithSupportedConversions
プロパティは、クラスを変換できるクラスを示します。
クラスのオブジェクトの配列を指定すると、添字による代入テストでは、欠損値を使用して配列を拡張できること、および欠損値を配列の要素の範囲に代入できることが検証されます。
連結テストでは、クラスのオブジェクトの配列を欠損値と連結できるかを検証します。
等価性テストでは、isequal
が 2 つの欠損値に対して false
を返し、isequaln
が 2 つの欠損値に対して true
を返すことを検証します。
SupportsComparison
プロパティ既定では、動作テストは、クラスが値 (欠損値を含む) の比較をサポートしていることを想定しています。比較テストでは、欠損値に関して、MATLAB の想定のとおりに ==
と ~=
が実装されたことを検証します。
==
を使用した 2 つの欠損値の比較ではfalse
が返されます。~=
を使用した 2 つの欠損値の比較ではtrue
が返されます。
クラスが比較をサポートしない場合、MATLAB によってこれらのテストが実行されないように、SupportsComparison
プロパティを false
に設定します。この場合、比較テストは仮定エラー (フィルター処理されたテスト) としてフィルター処理されます。さらに、SupportsComparison
が false
である場合、MATLAB では順序付けテストが実行されません。
SupportsOrdering
プロパティ既定では、動作テストは、クラスが値 (欠損値を含む) の順序付けをサポートしていることを想定しています。順序付けテストでは、欠損値に関して、MATLAB の想定のとおりに <
、>
、<=
および >=
が実装されたことを検証します。欠損値に関して、MATLAB では、すべての順序付け演算で false
が返されることを想定しています。
クラスが順序付けをサポートする場合、欠損コントラクトを満たすには、比較もサポートしなければなりません。SupportsComparison
が false
である場合、MATLAB では順序付けテストも比較テストも実行されません。この場合、順序付けテストは仮定エラー (フィルター処理されたテスト) としてマークされます。
クラスが順序付けをサポートしない場合、MATLAB によってこれらのテストが実行されないように、SupportsOrdering
プロパティを false
に設定します。この場合、順序付けテストは仮定エラー (フィルター処理されたテスト) としてマークされます。
UsableAsMissingIndicator
プロパティ既定では、動作テストは、欠損値インジケーターを表す関数 ismissing
のオプションの入力引数としてクラスのインスタンスを使用できることを前提としています。
クラスを欠損値インジケーターにできない場合は、MATLAB によってこれらのテストが実行されないように、UsableAsMissingIndicator
プロパティを false
に設定します。この場合、関連テストは仮定エラー (フィルター処理されたテスト) としてマークされます。
FillValue
プロパティ動作テストは、MATLAB がクラスの要素の配列を増加させた場合に、新しい要素が FillValue
プロパティによって指定された値をもつことを検証します。既定では、FillValue
プロパティの値は MissingValue
プロパティの値と同じです。ただし、FillValue
に対して異なる値を指定できます。
ExtraConstructorArguments
プロパティ動作テストでは、ExtraConstructorArguments
の引数を使用して作成されたクラスのインスタンスが欠損コントラクトを満たしていることを検証します。テスト対象クラスにコンストラクターの引数があり、その引数によって非互換の値 (たとえば、別のコンストラクター構文を使用して作成された値と連結できない値) が生じる可能性がある場合は、このプロパティを設定すると役立ちます。
バージョン履歴
R2018b で導入R2023b: 非互換の値になるコンストラクターの引数のテスト
ExtraConstructorArguments
プロパティを指定して、指定したコンストラクターの引数を使用するクラスが欠損値に関するコントラクトを満たしているかどうかをテストします。このプロパティは、非互換の値になるコンストラクターの引数についてテストする場合に使用します。
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)