이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

matlab.unittest.constraints.IsEqualTo 클래스

패키지: matlab.unittest.constraints
슈퍼클래스: matlab.unittest.constraints.BooleanConstraint

동일성을 비교하는 일반 제약 조건

설명

IsEqualTo 클래스는 데이터의 동일성을 비교하는 제약 조건을 생성합니다. 생성된 제약 조건이 사용하는 비교 유형은 예상 값의 데이터형을 따릅니다. 첫째, 테스트 프레임워크가 예상 값이 객체인지 확인합니다. 이 확인이 먼저 수행되는 이유는 객체가 그 이후의 확인(예: islogical)에 사용되는 메서드를 무시할 가능성이 있기 때문입니다. 다음 목록은 다양한 테스트들을 분류하여 설명합니다.

데이터형동일성 비교 방법
MATLAB® 및 Java® 객체

예상 값이 MATLAB 또는 Java 객체인 경우, 예상 값 객체에 대해 isequaln 메서드가 정의되어 있다면 IsEqualTo 제약 조건은 이 메서드를 호출합니다. 그렇지 않으면 isequal을 호출합니다. 확인에서 false를 반환하고 지원되는 허용오차가 지정된 경우, IsEqualTo 제약 조건은 값이 허용오차 내에 있는지 여부를 확인하기 전에 실제 값과 예상 값의 클래스, 크기 및 희소성이 같은지 확인합니다.

실제 값과 예상 값의 클래스와 크기가 동일하고 모든 속성이 같으므로 두 값이 같다고 확인되면 IsEqualToisequal 또는 isequaln 함수를 호출하지 않습니다.

논리형

예상 값이 logical인 경우, 제약 조건은 실제 값과 예상 값의 희소성이 같은지 확인합니다. 희소성이 일치하는 경우 제약 조건이 해당 값을 isequal 메서드와 비교합니다. 그렇지 않은 경우 제약 조건은 충족되지 않습니다.

숫자형

예상 값이 numeric인 경우 제약 조건은 실제 값과 예상 값의 클래스, 크기 및 희소성이 같은지 확인합니다. 이러한 확인 결과가 모두 일치하는 경우, 제약 조건은 isequaln 메서드를 사용하여 비교합니다. isequalntrue를 반환하는 경우 이 제약 조건은 충족됩니다. 실수/복소수 여부가 일치하지 않거나 isequalnfalse를 반환하는 경우이면서 지원되는 허용오차가 제공되었다면, 이 제약 조건은 허용오차를 사용하여 비교합니다. 그렇지 않은 경우 제약 조건은 충족되지 않습니다.

string형

예상 값이 string인 경우 제약 조건은 strcmp 함수를 사용하여 실제 값과 예상 값이 같은지 확인합니다. 그러나 IgnoreCase 속성이 true인 경우 strcmpi를 사용하여 string형을 비교합니다. IgnoreWhitespacetrue인 경우 실제 string형과 예상 string형을 strcmp 또는 strcmpi로 전달하기 전에 모든 공백 문자를 해당 string형에서 제거합니다.

구조체

예상 값이 struct인 경우 제약 조건이 실제 값과 예상 값의 필드 개수를 비교합니다. 같지 않은 경우 이 제약 조건은 충족되지 않습니다. 같은 경우에는 예상 값 struct의 각 필드는 실제 값 struct에 존재해야 합니다. 필드 이름이 하나라도 다른 경우 이 제약 조건은 충족되지 않습니다. 이때 제약 조건이 깊이 우선 탐색에서 필드를 재귀적으로 비교합니다. 기본 데이터형(즉, 논리, 숫자, string형 또는 객체)을 만날 때까지 재귀가 계속되며, 이때 값은 위의 설명대로 비교됩니다.

셀형 배열

예상 값이 셀형 배열인 경우 제약 조건은 실제 값과 예상 값의 크기가 같은지 확인합니다. 크기가 같지 않은 경우 이 제약 조건은 충족되지 않습니다. 같은 경우에는 위에 설명된 구조체의 필드와 동일한 방식으로 배열의 각 요소가 재귀적으로 비교됩니다.

테이블

예상 값이 table인 경우, 실제 값과 예상 값의 클래스, 크기, 테이블 속성이 같은지 확인합니다. 실제 값과 예상 값의 클래스, 크기 또는 테이블 속성이 같지 않은 경우 제약 조건이 충족되지 않습니다. 그러면 제약 조건이 각 열 변수의 크기와 유형을 비교하고 깊이 우선 탐색에서 테이블의 각 행을 재귀적으로 비교합니다. 기본 데이터형(즉, 논리, 숫자, string형 또는 객체)을 만날 때까지 재귀가 계속되며, 이때 값은 위의 설명대로 비교됩니다.

생성

IsEqualTo(expVal)은 동일성을 비교하는 일반 제약 조건을 제공합니다.

IsEqualTo(expVal,Name,Value)는 하나 이상의 Name,Value 쌍 인수가 추가 옵션으로 지정된 제약 조건을 제공합니다. Name은 작은따옴표('') 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

입력 인수

expVal

실제 값과 비교되는 예상 값입니다.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

'IgnoringCase'

제약 조건이 대/소문자를 무시하는지 여부를 나타내는 표시로, false 또는 true(logical 0 또는 1)로 지정됩니다.

디폴트 값: false

'IgnoringFields'

구조체 비교 시 무시할 필드로, 문자형 벡터로 구성된 셀형 배열로 지정됩니다.

디폴트 값: (비어 있음)

'IgnoringWhitespace'

제약 조건이 공백을 무시하는지 여부를 나타내는 표시로, false 또는 true(logical 0 또는 1)로 지정됩니다.

디폴트 값: false

'Using'

제약 조건을 생성할 때 사용되는 특정 비교 연산자로, matlab.unittest.constraints.Comparator 객체로 지정됩니다.

디폴트 값: (비어 있음)

'Within'

제약 조건을 생성할 때 사용되는 허용오차로, matlab.unittest.constraints.Tolerance 객체로 지정됩니다.

디폴트 값: (비어 있음)

속성

Comparator

제약 조건을 생성할 때 사용되는 특정 비교 연산자로, 이름-값 쌍의 인수 'Using'matlab.unittest.constraints.Comparator 객체로 지정됩니다.

Expected

실제 값과 비교되는 예상 값으로, expVal 입력 인수에 지정됩니다.

IgnoreCase

제약 조건이 대/소문자를 무시하는지 여부를 나타내는 표시로, 'IgnoringCase' 인수를 통해 이름-값 쌍으로 지정됩니다. 이 속성은 중첩 구조와 같은 재귀적 계층의 모든 수준에 적용됩니다.

IgnoredFields

구조체 비교 시 무시할 필드로, 'IgnoringFields' 인수를 통해 이름-값 쌍으로 지정됩니다.

IgnoreWhitespace

제약 조건이 공백을 무시하는지 여부를 나타내는 표시로, 'IgnoringWhitespace' 인수를 통해 이름-값 쌍으로 지정됩니다. 이 속성은 중첩 구조와 같은 재귀적 계층의 모든 수준에 적용됩니다.

Tolerance

제약 조건을 생성할 때 사용되는 특정 허용오차로, 이름-값 쌍의 인수 'Within'matlab.unittest.constraints.Tolerance 객체로 지정됩니다. 이 속성은 중첩 구조와 같은 재귀적 계층의 모든 수준에 적용됩니다.

복사 의미 체계

값입니다. 값 클래스가 복사 작업에 미치는 영향에 대한 내용은 객체 복사 항목을 참조하십시오.

예제

모두 축소

대화형 방식 테스트를 위한 TestCase를 생성합니다.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.AbsoluteTolerance
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

실제 값 5가 예상 값과 같은지 확인합니다.

expVal = 5;
testCase.verifyThat(5,IsEqualTo(expVal))
Verification passed.

실제 값이 4.95라고 가정합니다. 실제 값과 예상 값 간의 오차가 0.09 미만인지 확인합니다.

testCase.verifyThat(4.95,IsEqualTo(expVal,'Within',AbsoluteTolerance(0.09)))
Verification passed.

실제 값이 4.9라고 가정합니다. 실제 값과 예상 값 간의 오차가 1% 미만인지 확인합니다.

testCase.verifyThat(4.9,IsEqualTo(expVal,'Within',RelativeTolerance(0.01)))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> RelativeTolerance failed.
            --> The error was not within relative tolerance.
            --> Failure table:
                    Actual    Expected           Error              RelativeError       RelativeTolerance
                    ______    ________    ___________________    ___________________    _________________
                     4.9         5        -0.0999999999999996    -0.0199999999999999          0.01       
        
        Actual Value:
           4.900000000000000
        Expected Value:
             5

두 값의 오차가 1%를 초과합니다.

대화형 방식 테스트를 위한 TestCase를 생성합니다.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo
import matlab.unittest.constraints.RelativeTolerance

testCase = TestCase.forInteractiveUse;

0.1*3 = 0.3인지 테스트합니다.

act = 0.1*3;
exp = 0.3;
testCase.verifyThat(act, IsEqualTo(exp))
Verification failed.
    ---------------------
    Framework Diagnostic:
    ---------------------
    IsEqualTo failed.
    --> NumericComparator failed.
        --> The numeric values are not equal using "isequaln".
        --> Failure table:
                Actual    Expected           Error               RelativeError    
                ______    ________    ____________________    ____________________
                 0.3        0.3       5.55111512312578e-17    1.85037170770859e-16
        
        Actual Value:
           0.300000000000000
        Expected Value:
           0.300000000000000

이 테스트는 부동소수점 산술의 반올림 오차로 인해 실패합니다.

허용오차를 사용하여 부동소수점 숫자를 비교합니다. 상대 허용오차 2*eps 내에서 0.1*3 = 0.3인지 테스트합니다.

testCase.verifyThat(act, IsEqualTo(exp, ...
    'Within', RelativeTolerance(2*eps)))
Verification passed.

대화형 방식 테스트를 위한 TestCase를 생성합니다.

import matlab.unittest.TestCase
import matlab.unittest.constraints.IsEqualTo

testCase = TestCase.forInteractiveUse;

두 개의 문자형 벡터가 동일한지 확인합니다.

expVal = 'Hello';
testCase.verifyThat('Hello',IsEqualTo(expVal))
Verification passed.

실제 값의 대/소문자 여부를 변경하고 동일성을 테스트합니다.

testCase.verifyThat('hello',IsEqualTo(expVal))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> StringComparator failed.
    --> The character arrays are not equal.
    
    Actual char:
        hello
    Expected char:
        Hello

대/소문자를 무시하고 다시 테스트합니다.

testCase.verifyThat('hello',IsEqualTo(expVal,'IgnoringCase',true))
Verification passed.

공백을 무시하고 두 문자형 벡터를 테스트합니다.

expVal = 'a bc';
testCase.verifyThat('abc',IsEqualTo(expVal,'IgnoringWhitespace',true))
testCase.verifyThat('ab c',IsEqualTo(expVal,'IgnoringWhitespace',true))
Verification passed.
Verification passed.

대화형 방식 테스트를 위한 테스트 케이스를 생성합니다.

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

testCase = TestCase.forInteractiveUse;

실제 및 예상 timeseries 객체를 정의합니다. 실제 데이터 점 중 하나를 1%만큼 섭동합니다.

expected = timeseries(1:10);
actual = expected;
actual.Data(7) = 1.01*actual.Data(7);

실제 값과 예상 값이 상대 허용오차 2% 내에서 같은지 테스트합니다.

testCase.verifyThat(actual, IsEqualTo(expected,...
    'Within', RelativeTolerance(.02)))
Verification failed.

---------------------
Framework Diagnostic:
---------------------
IsEqualTo failed.
--> ObjectComparator failed.
    --> The objects are not equal using "isequal".
    --> The tolerance was ignored. The tolerance as specified does not support comparisons of timeseries values.
    
    Actual timeseries:
          timeseries
        
          Common Properties:
                    Name: 'unnamed'
                    Time: [10x1 double]
                TimeInfo: [1x1 tsdata.timemetadata]
                    Data: [1x1x10 double]
                DataInfo: [1x1 tsdata.datametadata]
        
          More properties, Methods
    Expected timeseries:
          timeseries
        
          Common Properties:
                    Name: 'unnamed'
                    Time: [10x1 double]
                TimeInfo: [1x1 tsdata.timemetadata]
                    Data: [1x1x10 double]
                DataInfo: [1x1 tsdata.datametadata]
        
          More properties, Methods

제약 조건을 생성할 때 PublicPropertyComparator를 사용합니다.

testCase.verifyThat(actual, IsEqualTo(expected,...
    'Within', RelativeTolerance(.02),...
    'Using', PublicPropertyComparator.supportingAllValues))
Interactive verification passed.

PublicPropertyComparator가 객체를 한 번에 비교하는 대신 각 퍼블릭 속성을 개별적으로 비교하기 때문에 이 테스트 결과는 통과입니다. 첫 번째 테스트에서 ObjectComparatortimeseries 객체를 비교하므로 timeseries 클래스의 isequal 메서드에 의존합니다. 실제 timeseries의 섭동 때문에 isequalfalse를 반환합니다. 비교 연산자는 double형 값 허용오차가 timeseries 객체에 직접 적용될 수 없기 때문에 허용오차를 적용하지 않습니다. 두 번째 테스트에서 비교 연산자는 double형 값 데이터를 포함하는 각 퍼블릭 속성에 허용오차를 적용합니다.

R2013a에 개발됨