Main Content

matlab.unittest.constraints.PublicPropertyComparator クラス

名前空間: matlab.unittest.constraints

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

説明

matlab.unittest.constraints.PublicPropertyComparator クラスは、MATLAB® オブジェクト配列のパブリック プロパティの比較演算子を提供します。この比較演算子をテストで使用するには、PublicPropertyComparator インスタンスを作成し、それを IsEqualTo 制約コンストラクターの名前と値の引数 Using の値として指定します。

関数 isequal、関数 isequaln、または ObjectComparator クラスとは異なり、PublicPropertyComparator クラスではオブジェクト配列のパブリック プロパティのみが調べられます。

作成

一般に、PublicPropertyComparator インスタンスは静的メソッド supportingAllValues を使用して作成します。結果として得られるインスタンスでは、再帰的に演算が行われ、パブリック プロパティに格納されたすべてのデータ型がサポートされます。特定のデータ型についてテストする必要がある場合など、特定用途向けのインスタンスを作成するには、このセクションのいずれかの構文を使用します。

説明

c = matlab.unittest.constraints.PublicPropertyComparator は、空のオブジェクト配列またはパブリック プロパティをもたないオブジェクト配列の比較演算子を作成します。この比較演算子は、実際の値と期待される値が同じクラスとサイズをもつオブジェクト配列で、そのいずれかが空であるかパブリック プロパティをもたない場合に満たされます。

c = matlab.unittest.constraints.PublicPropertyComparator(comp) は、指定された比較演算子 comp を使用して、パブリック プロパティに格納された値を比較します。この構文を使用する場合、実際の値と期待される値が同じクラスとサイズをもつオブジェクト配列で、それらの対応するパブリック プロパティの値が comp の比較演算子のいずれかを満たしていれば比較演算子が満たされます。

c = matlab.unittest.constraints.PublicPropertyComparator(___,Name,Value) は、前述の構文の任意の入力引数の組み合わせに加え、1 つ以上の名前と値の引数を使用して追加のオプションを設定します。たとえば、c = matlab.unittest.constraints.PublicPropertyComparator("Recursively",true) は、パブリック プロパティに格納された値を比較するときに再帰的に演算を行う比較演算子を作成します。

入力引数

すべて展開する

パブリック プロパティに格納された値の比較に使用する比較演算子。matlab.unittest.constraints 名前空間において比較演算子として分類されるクラスのオブジェクト配列として指定します。

例: matlab.unittest.constraints.NumericComparator

例: matlab.unittest.constraints.StringComparator("IgnoringCase",true)

例: [matlab.unittest.constraints.LogicalComparator matlab.unittest.constraints.NumericComparator]

名前と値の引数

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

例: c = matlab.unittest.constraints.PublicPropertyComparator(Recursively=true)

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

例: c = matlab.unittest.constraints.PublicPropertyComparator("Recursively",true)

比較時に無視するプロパティ。string 配列または文字ベクトルの cell 配列として指定します。指定したプロパティの値は比較演算子で比較されません。

この引数は IgnoredProperties プロパティを設定します。

例: "IgnoringProperties","Property1"

再帰的に演算するかどうか。数値または logical 0 (false) または 1 (true) として指定します。

値が true の場合、実際のオブジェクト配列と期待されるオブジェクト配列のパブリック プロパティの値も MATLAB オブジェクト配列にすることができ、それらの値が比較演算子で再帰的に比較されます。値が false の場合は、実際のオブジェクト配列と期待されるオブジェクト配列のパブリック プロパティのすべての値が comp でサポートされる型でなければなりません。たとえば、次のコードでは、c1c2 のどちらでもパブリック プロパティに数値が格納されたオブジェクト配列を比較できます。ただし、パブリック プロパティにオブジェクト配列または数値のいずれかを格納するオブジェクト配列を比較できるのは c2 のみです。

import matlab.unittest.constraints.PublicPropertyComparator
import matlab.unittest.constraints.NumericComparator

c1 = PublicPropertyComparator(NumericComparator);
c2 = PublicPropertyComparator(NumericComparator,"Recursively",true);

この引数は Recursive プロパティを設定します。

プロパティ

すべて展開する

比較時に無視するプロパティ。文字ベクトルの cell 配列として返されます。

このプロパティは名前と値の引数 IgnoringProperties によって設定されます。

属性:

GetAccess
public
SetAccess
private

再帰的に演算するかどうか。logical 0 (false) または 1 (true) として返されます。静的メソッド supportingAllValues を使用して PublicPropertyComparator インスタンスを作成する場合、このプロパティの既定値は true です。それ以外の場合、このプロパティの既定値は false です。

このプロパティは名前と値の引数 Recursively によって設定されます。

属性:

GetAccess
public
SetAccess
private

メソッド

すべて展開する

すべて折りたたむ

PublicPropertyComparator クラスを使用して、実際の値と期待される値を比較します。

現在のフォルダー内の Employee.m という名前のファイルに、Employee クラスを作成します。このクラスには、パブリック プロパティ Name とプライベート プロパティ Location があります。

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

この例で使用するクラスをインポートします。

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

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

testCase = TestCase.forInteractiveUse;

PublicPropertyComparator インスタンスを使用して、2 つの空の Employee オブジェクトを比較します。テストはパスします。

testCase.verifyThat(Employee.empty,IsEqualTo(Employee.empty, ...
    "Using",PublicPropertyComparator))
Verification passed.

2 つの空でない Employee オブジェクトを作成し、それらを IsEqualTo 制約を使用して比較します。この例では、Location プロパティの値が異なるためテストが失敗します。

e1 = Employee("Sam","Building A");
e2 = Employee("Sam","Building B");
testCase.verifyThat(e1,IsEqualTo(e2))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> ObjectComparator failed.
        --> The objects are not equal using "isequaln".
        
        Actual Value:
          Employee with properties:
        
            Name: "Sam"
        Expected Value:
          Employee with properties:
        
            Name: "Sam"
    ------------------
    Stack Information:
    ------------------
    In C:\work\CompareValuesUsingPublicPropertyComparatorExample.m (CompareValuesUsingPublicPropertyComparatorExample) at 35

PublicPropertyComparator インスタンスを使用して、このテストをもう一度実行します。比較を実行するには、適切な比較演算子を PublicPropertyComparator コンストラクターに渡します。e1.Locatione2.Location の値は異なりますが、この比較演算子で調べられるのは e1e2 のパブリック プロパティのみであるため、テストにパスします。

testCase.verifyThat(e1,IsEqualTo(e2, ...
    "Using",PublicPropertyComparator(StringComparator)))
Verification passed.

新しい Employee オブジェクトを作成し、それを e1 と比較します。e1.Namee3.Name の値が異なるため、テストは失敗します。

e3 = Employee("sam","Building C");
testCase.verifyThat(e1,IsEqualTo(e3, ...
    "Using",PublicPropertyComparator(StringComparator)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> Path to failure: <Value>.Name
        --> StringComparator failed.
            --> The strings are not equal.
            
            Actual Value:
                "Sam"
            Expected Value:
                "sam"
    
    Actual Value:
      Employee with properties:
    
        Name: "Sam"
    Expected Value:
      Employee with properties:
    
        Name: "sam"
    ------------------
    Stack Information:
    ------------------
    In C:\work\CompareValuesUsingPublicPropertyComparatorExample.m (CompareValuesUsingPublicPropertyComparatorExample) at 49

テストにパスするように、大文字小文字の区別を無視する比較演算子を使用します。

testCase.verifyThat(e1,IsEqualTo(e3, ...
    "Using",PublicPropertyComparator( ...
    StringComparator("IgnoringCase",true))))
Verification passed.

代わりに、比較時に Name プロパティを無視するように比較演算子に指示することもできます。

testCase.verifyThat(e1,IsEqualTo(e3, ...
    "Using",PublicPropertyComparator( ...
    StringComparator,"IgnoringProperties","Name")))
Verification passed.

制限

  • PublicPropertyComparator クラスでは、関数 subsrefnumel、または properties をオーバーロードするオブジェクトのパブリック プロパティはサポートされません。

バージョン履歴

R2014a で導入