Main Content

matlab.unittest.constraints.PublicPropertyComparator 클래스

네임스페이스: matlab.unittest.constraints

MATLAB 객체 배열의 퍼블릭 속성에 대한 비교 연산자

설명

matlab.unittest.constraints.PublicPropertyComparator 클래스는 MATLAB® 객체 배열 퍼블릭 속성의 비교 연산자를 제공합니다. 테스트에 이 비교 연산자를 사용하려면 PublicPropertyComparator 인스턴스를 만들고 IsEqualTo 제약 조건 생성자의 Using 이름-값 인수의 값으로 지정합니다.

isequal 함수, isequaln 함수 또는 ObjectComparator 클래스와 달리, PublicPropertyComparator 클래스는 객체 배열의 퍼블릭 속성만 검사합니다.

생성

일반적으로 supportingAllValues 정적 메서드를 사용하여 PublicPropertyComparator 인스턴스를 생성합니다. 결과 인스턴스는 재귀적으로 동작하며 퍼블릭 속성에 포함된 모든 데이터형을 지원합니다. 구체적인 경우를 위한 인스턴스를 만들려면(예: 지정된 데이터형 테스트), 다음 섹션의 구문을 사용하십시오.

설명

예제

c = matlab.unittest.constraints.PublicPropertyComparator는 빈 객체 배열 또는 퍼블릭 속성이 없는 객체 배열의 비교 연산자를 만듭니다. 이 비교 연산자는 실제 값과 예상 값이 클래스와 크기가 동일하고 비어 있거나 퍼블릭 속성이 없는 객체 배열일 경우 충족됩니다.

예제

c = matlab.unittest.constraints.PublicPropertyComparator(comp)는 지정된 비교 연산자 comp를 사용하여 퍼블릭 속성에 포함된 값을 비교합니다. 이 구문을 사용하면 이 비교 연산자는 실제 값과 예상 값이 클래스와 크기가 동일한 객체 배열이고 그에 대응하는 퍼블릭 속성의 값이 comp 비교 연산자를 만족할 경우에 충족됩니다.

예제

c = matlab.unittest.constraints.PublicPropertyComparator(___,Name,Value)는 위에 열거된 구문에 나와 있는 입력 인수 조합 외에, 이름-값 인수를 하나 이상 사용하여 추가 옵션을 설정합니다. 예를 들어, 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형 배열 또는 문자형 벡터로 구성된 셀형 배열로 지정됩니다. 비교 연산자는 지정된 속성의 값을 비교하지 않습니다.

이 인수는 IgnoredProperties 속성을 설정합니다.

예: "IgnoringProperties","Property1"

재귀적으로 동작을 수행할지 여부로, 숫자형 또는 논리값 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 속성을 설정합니다.

속성

모두 확장

비교 시 무시할 속성으로, 문자형 벡터로 구성된 셀형 배열로 반환됩니다.

이 속성은 IgnoringProperties 이름-값 인수에 의해 설정됩니다.

특성:

GetAccess
public
SetAccess
private

재귀적으로 동작을 수행할지 여부로, 논리값 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 인스턴스를 사용하여 두 개의 빈 Employee 객체를 비교합니다. 테스트가 통과합니다.

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

비어 있지 않은 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 클래스는 subsref, numel, properties 함수 중 하나를 오버로드하는 객체의 퍼블릭 속성을 지원하지 않습니다.

버전 내역

R2014a에 개발됨