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

파라미터화된 테스트에 외부 파라미터 사용하기

기존의 클래스 기반 테스트에 가변 입력값을 삽입할 수 있습니다. 테스트 파일 외부에서 정의된 테스트 데이터를 제공해야 하고, 테스트를 수행할 때 파라미터화된 테스트를 통해 그 데이터를 반복적으로 사용해야 한다면, Parameter를 생성하고 TestSuite.fromClass 같은 TestSuite 생성 메서드에 'ExternalParameters' 옵션을 사용하십시오.

테스트를 위해 다음 함수를 생성합니다. 이 함수는 배열을 받아 벡터화하고 0, Nan, Inf를 제거한 후 배열을 정렬합니다.

function Y = cleanData(X)
    Y = X(:);         % Vectorize array
    Y = rmmissing(Y); % Remove NaN
    % Remove 0 and Inf
    idx = (Y==0 | Y==Inf);
    Y = Y(~idx);
    % If array is empty, set to eps
    if isempty(Y)
        Y = eps;
    end
    Y = sort(Y);      % Sort vector
end

cleanData 함수에 대해 다음과 같이 파라미터화된 테스트를 생성합니다. 이 테스트는 properties 블록에 정의된 2개의 데이터 세트에 대해 4개의 테스트 메서드를 각각 반복합니다.

classdef TestClean < matlab.unittest.TestCase
    properties (TestParameter)
        Data = struct('clean',[5 3 9;1 42 5;32 5 2],...
            'needsCleaning',[1 13;NaN 0;Inf 42]);
    end
    methods (Test)
        function classCheck(testCase,Data)
            act = cleanData(Data);
            testCase.assertClass(act,'double')
        end
        function sortCheck(testCase,Data)
            act = cleanData(Data);
            testCase.verifyTrue(issorted(act))
        end
        function finiteCheck(testCase,Data)
            import matlab.unittest.constraints.IsFinite
            act = cleanData(Data);
            testCase.verifyThat(act,IsFinite)
        end
        function noZeroCheck(testCase,Data)
            import matlab.unittest.constraints.EveryElementOf
            import matlab.unittest.constraints.IsEqualTo
            act = cleanData(Data);
            testCase.verifyThat(EveryElementOf(act),~IsEqualTo(0))
        end
    end    
end

파라미터화된 테스트 스위트를 생성하고 실행합니다. 결과를 봅니다. 프레임워크가 테스트 파일에 정의된 데이터를 사용하여 8개의 파라미터화된 테스트를 실행합니다.

import matlab.unittest.TestSuite
suite1 = TestSuite.fromClass(?TestClean);
results = suite1.run;
table(results)
Running TestClean
........
Done TestClean
__________


ans =

  8×6 table

                       Name                        Passed    Failed    Incomplete    Duration       Details   
    ___________________________________________    ______    ______    __________    _________    ____________

    'TestClean/classCheck(Data=clean)'             true      false       false         0.27887    [1×1 struct]
    'TestClean/classCheck(Data=needsCleaning)'     true      false       false       0.0069881    [1×1 struct]
    'TestClean/sortCheck(Data=clean)'              true      false       false       0.0046028    [1×1 struct]
    'TestClean/sortCheck(Data=needsCleaning)'      true      false       false       0.0035363    [1×1 struct]
    'TestClean/finiteCheck(Data=clean)'            true      false       false        0.023965    [1×1 struct]
    'TestClean/finiteCheck(Data=needsCleaning)'    true      false       false       0.0024557    [1×1 struct]
    'TestClean/noZeroCheck(Data=clean)'            true      false       false          0.7077    [1×1 struct]
    'TestClean/noZeroCheck(Data=needsCleaning)'    true      false       false       0.0093186    [1×1 struct]

테스트 파일 외부에 데이터 세트를 생성합니다.

A = [NaN 2 0;1 Inf 3];

외부 데이터 세트를 갖는 파라미터를 생성합니다. fromData 메서드는 TestCleanproperties 블록에서 파라미터화된 속성의 이름과 새 데이터를 셀형 배열(또는 구조체)로 받습니다.

import matlab.unittest.parameters.Parameter
newData = {A};
param = Parameter.fromData('Data',newData);

새 테스트 스위트를 생성하고 스위트 요소 이름을 봅니다. fromClass 메서드가 새 파라미터를 받습니다.

suite2 = TestSuite.fromClass(?TestClean,'ExternalParameters',param);
{suite2.Name}'
ans =

  4×1 cell array

    {'TestClean/classCheck(Data=value1#ext)' }
    {'TestClean/sortCheck(Data=value1#ext)'  }
    {'TestClean/finiteCheck(Data=value1#ext)'}
    {'TestClean/noZeroCheck(Data=value1#ext)'}

프레임워크가 외부 파라미터를 사용하여 4개의 스위트 요소를 생성합니다. 파라미터가 셀형 배열로 정의되어 있으므로 MATLAB은 파라미터 이름(value1)을 생성합니다. 또한, 문자 #ext를 파라미터 이름의 끝에 추가하여 파라미터가 외부에서 정의되었음을 나타냅니다.

valueN 대신에 다른 의미 있는 파라미터 이름을 할당하려면 구조체를 사용하여 파라미터를 정의하십시오. 스위트 요소 이름을 보고 테스트를 실행합니다.

newData = struct('commandLineData',A);
param = Parameter.fromData('Data',newData);
suite2 = TestSuite.fromClass(?TestClean,'ExternalParameters',param);
{suite2.Name}'
results = suite2.run;
ans =

  4×1 cell array

    {'TestClean/classCheck(Data=commandLineData#ext)' }
    {'TestClean/sortCheck(Data=commandLineData#ext)'  }
    {'TestClean/finiteCheck(Data=commandLineData#ext)'}
    {'TestClean/noZeroCheck(Data=commandLineData#ext)'}

Running TestClean
....
Done TestClean
__________

ASCII로 구분된 파일에 저장된 다른 데이터 세트를 생성합니다.

B = rand(3);
B(2,4) = 0;
dlmwrite('myFile.dat',B)
clear B

저장된 데이터 세트와 A를 갖는 파라미터를 생성합니다.

newData = struct('commandLineData',A,'storedData',dlmread('myFile.dat'));
param2 = Parameter.fromData('Data',newData);
suite3 = TestSuite.fromClass(?TestClean,'ExternalParameters',param2);

테스트 파일에 정의된 파라미터와 외부에서 정의된 파라미터를 사용하여 테스트를 실행하려면 테스트 스위트를 결합합니다. 스위트 요소 이름을 보고 테스트를 실행합니다.

suite = [suite1 suite3];
{suite.Name}'
results = suite.run;
ans =

  16×1 cell array

    {'TestClean/classCheck(Data=clean)'               }
    {'TestClean/classCheck(Data=needsCleaning)'       }
    {'TestClean/sortCheck(Data=clean)'                }
    {'TestClean/sortCheck(Data=needsCleaning)'        }
    {'TestClean/finiteCheck(Data=clean)'              }
    {'TestClean/finiteCheck(Data=needsCleaning)'      }
    {'TestClean/noZeroCheck(Data=clean)'              }
    {'TestClean/noZeroCheck(Data=needsCleaning)'      }
    {'TestClean/classCheck(Data=commandLineData#ext)' }
    {'TestClean/classCheck(Data=storedData#ext)'      }
    {'TestClean/sortCheck(Data=commandLineData#ext)'  }
    {'TestClean/sortCheck(Data=storedData#ext)'       }
    {'TestClean/finiteCheck(Data=commandLineData#ext)'}
    {'TestClean/finiteCheck(Data=storedData#ext)'     }
    {'TestClean/noZeroCheck(Data=commandLineData#ext)'}
    {'TestClean/noZeroCheck(Data=storedData#ext)'     }

Running TestClean
........
Done TestClean
__________

Running TestClean
........
Done TestClean
__________

참고 항목

|

관련 항목