Main Content

matlab.unittest.constraints.PublicPropertyComparator クラス

パッケージ: matlab.unittest.constraints

MATLAB オブジェクトのパブリック プロパティの比較演算子

説明

PublicPropertyComparator は、MATLAB® オブジェクトのパブリック プロパティを比較します。

PublicPropertyComparator は、MATLAB オブジェクトまたはオブジェクトの配列をサポートし、パブリック プロパティに含まれるデータ構造体を再帰的に比較します。PublicPropertyComparator は、オブジェクトのパブリック プロパティのみを検証するという点で、関数 isequal とは異なります。

通常は、静的メソッド supportingAllValues を使用して PublicPropertyComparator を作成します。

構築

PublicPropertyComparator は、MATLAB オブジェクトのパブリック プロパティの比較演算子を作成します。この比較演算子は、パブリック プロパティをもたないオブジェクトのみをサポートします。

PublicPropertyComparator(compObj) は、パブリック プロパティの比較に使用する比較演算子を定義する比較演算子 compObj を示します。この比較演算子は、compObj がサポートするデータ型でのみ再帰をサポートします。

PublicPropertyComparator(compObj,Name,Value) は、1 つ以上の Name,Value のペアの引数で指定された追加オプションをもつ比較演算子を提供します。

メソッド

supportingAllValues再帰で任意の値をサポートする、パブリック プロパティの比較演算子

入力引数

すべて展開する

compObj

Comparator オブジェクト

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

オブジェクトの比較時に無視するプロパティ。文字ベクトルの cell 配列または string 配列として指定します。

例: PublicPropertyComparator('IgnoringProperties',{'Stack'})

比較演算子が再帰的に演算するかどうかの設定。false または true (logical 0 または 1) として指定します。この値が false の場合、データで比較演算子が再帰的に機能しません。

値が true の場合、パブリック プロパティの比較演算子がサポートするデータ型が再帰で完全にサポートされます。

プロパティ

IgnoredProperties

オブジェクトの比較時に無視するプロパティ。名前と値のペアの引数 'IgnoringProperties' で指定します。

Recursive

比較演算子が再帰的に演算するかどうかを示すインジケーター。名前と値のペアの引数 'Recursively' で指定します。

制限

  • PublicPropertyComparator は、関数 subsrefnumel または properties をオーバーロードするオブジェクトのパブリック プロパティを比較しません。

コピーのセマンティクス

値。値クラスがコピー操作に与える影響については、オブジェクトのコピーを参照してください。

すべて折りたたむ

作業フォルダー内のファイルに、次の Employee クラスを作成します。

classdef Employee
    properties (SetAccess=immutable)
        Name
    end
    properties (Access=private)
        Location
    end
    methods
        function obj = Employee(name,location)
            obj.Name = name;
            obj.Location = location;
        end
    end
end

コマンド プロンプトで、Employee クラスの 2 つのインスタンスを作成します。

e1 = Employee('sam','Building A');
e2 = Employee('Sam','Building B');

対話型テスト用にテスト ケースを作成します。

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.PublicPropertyComparator
import matlab.unittest.constraints.StringComparator

testCase = TestCase.forInteractiveUse;

比較演算子を作成して、e1e2 が等しいことを検証します。

compObj = PublicPropertyComparator;
testCase.verifyThat(e1, IsEqualTo(e2,'Using',compObj))
Error using matlab.unittest.constraints.Comparator/throwUnsupportedValue (line 313)
None of the currently available comparators support the value.

Available Comparators:
    1×0 Comparator array with no properties.

Value (char):
        Sam

Error in matlab.unittest.constraints.Comparator>getActExpCompFrom (line 402)
    throwUnsupportedValue(comparison.Comparators,expVal);

Error in matlab.unittest.constraints.Comparator>deepComparisonIsSatisfied (line 351)
[actVal,expVal,comp] = getActExpCompFrom(comparison);

Error in matlab.unittest.constraints.Comparator>deepComparisonIsSatisfied (line 355)
        if ~deepComparisonIsSatisfied(subComparisonArray(k))

Error in matlab.unittest.constraints.Comparator/satisfiedBy (line 84)
            bool = deepComparisonIsSatisfied(comparison);

Error in matlab.unittest.constraints.IsEqualTo/satisfiedBy (line 193)
            bool = constraint.Comparator.satisfiedBy(actual,constraint.Expected);

Error in matlab.unittest.internal.qualifications.QualificationDelegate/qualifyThat (line 80)
                result = constraint.satisfiedBy(actual);

Error in matlab.unittest.qualifications.Verifiable/verifyThat (line 230)
            qualifyThat(verifiable.VerificationDelegate, ...

既定では、PublicPropertyComparator は文字ベクトルをサポートしないため、テストは失敗します。

文字ベクトルをサポートする比較演算子を作成します。比較で大文字と小文字を区別しないことを指定します。

compObj = PublicPropertyComparator(StringComparator);
testCase.verifyThat(e1, IsEqualTo(e2,'Using',compObj, 'IgnoringCase',true))
Interactive verification passed.

e1.Locatione2.Location は同じではありませんが、テストはパスします。Location はプライベート プロパティであるため、比較演算子は内容を比較しません。

バージョン履歴

R2014a で導入