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

동적으로 필터링된 테스트

가정(Assumption)에 실패하면 필터링된 테스트가 생성됩니다. matlab.unittest.TestResult 클래스에서 이 테스트는 Incomplete로 표시됩니다.

가정을 사용하여 테스트 콘텐츠를 필터링해도 테스트가 실패하지 않으므로 데드 테스트 코드가 생성될 가능성이 있습니다. 이를 방지하려면 필터링된 테스트를 모니터링해야 합니다.

테스트 메서드

Test 특성(Attribute)이 있는 TestCase 메서드 내에서 가정(Assumption) 실패가 발생하는 경우, 전체 메서드가 필터링된 상태로 표시되지만 MATLAB®이 후속 Test 메서드를 실행합니다.

다음 클래스에는 Test 블록에 있는 메서드 중 하나에 가정 실패가 포함되어 있습니다.

classdef ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testA(testCase)
            testCase.verifyTrue(true)
        end
        function testB(testCase)
            testCase.assumeEqual(0,1)
            % remaining test code is not exercised
        end
        function testC(testCase)
            testCase.verifyFalse(true)
        end
    end
end

testB 메서드에 가정 실패가 포함되어 있으므로, 테스트를 실행하면 테스트 프레임워크가 해당 테스트를 필터링하고 이를 미완료 상태로 표시합니다. testB에서 가정 실패가 발생한 후, 테스트 프레임워크는 계속 진행하여 testC를 실행하는데, 여기에는 검증(Verification) 실패가 들어 있습니다.

ts = matlab.unittest.TestSuite.fromClass(?ExampleTest);
res = ts.run;
Running ExampleTest
.
================================================================================
ExampleTest/testB was filtered.
Details
================================================================================
.
================================================================================
Verification failed in ExampleTest/testC.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyFalse failed.
    --> The value must evaluate to "false".
    
    Actual logical:
           1

    ------------------
    Stack Information:
    ------------------
    In C:\work\ExampleTest.m (ExampleTest.testC) at 11
================================================================================
.
Done ExampleTest
__________

Failure Summary:

     Name               Failed  Incomplete  Reason(s)
    ================================================================
     ExampleTest/testB              X       Filtered by assumption.
    ----------------------------------------------------------------
     ExampleTest/testC    X                 Failed by verification.

TestResult를 검토하면 통과한 테스트, 실패한 테스트, 가정 실패로 인해 완료되지 않은 테스트가 있다는 것을 알 수 있습니다.

res
res = 

  1×3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   1 Passed, 1 Failed, 1 Incomplete.
   2.4807 seconds testing time.

테스트 프레임워크는 필터링된 테스트에서 실행되지 않은 테스트 코드를 모니터링할 수 있도록, 완료되지 않은 테스트를 추적합니다. TestResult 객체 내에서 이 테스트에 대한 정보를 확인할 수 있습니다.

res([res.Incomplete])
ans = 

  TestResult with properties:

          Name: 'ExampleTest/testB'
        Passed: 0
        Failed: 0
    Incomplete: 1
      Duration: 2.2578
       Details: [1×1 struct]

Totals:
   0 Passed, 0 Failed, 1 Incomplete.
   2.2578 seconds testing time.

오직 필터링된 테스트 중에서만 수정된 테스트 스위트를 만들려면 원래 테스트 스위트에서 미완료 테스트를 선택하십시오.

tsFiltered = ts([res.Incomplete])
tsFiltered = 

  Test with properties:
                  Name: 'ExampleTest/testB'
         ProcedureName: 'testB'
             TestClass: "ExampleTest"
            BaseFolder: 'C:\work'
      Parameterization: [0×0 matlab.unittest.parameters.EmptyParameter]
    SharedTestFixtures: [0×0 matlab.unittest.fixtures.EmptyFixture]
                  Tags: {1×0 cell}

Tests Include:
   0 Parameterizations, 0 Shared Test Fixture Classes, 0 Tags.

메서드 설정(Setup) 코드와 해제(Teardown) 코드

TestMethodSetup 특성(Attribute)이 있는 TestCase 메서드 내에서 가정(Assumption) 실패가 발생하는 경우, MATLAB에서 해당 인스턴스에 대해 실행할 예정이던 메서드를 필터링합니다. 테스트가 TestMethodSetup 블록 내에서 가정을 사용하는 경우에는, TestClassSetup 블록에서 가정을 사용하는 것을 고려해 볼 수 있습니다. 이 방법은 똑같이 클래스 내의 모든 Test 메서드를 필터링하지만 더 간략하면서도 효율적입니다.

ExampleTest.m 내의 다음 TestMethodSetup 블록에 있는 하나의 메서드에 가정 실패가 들어있습니다.

    methods(TestMethodSetup)
        function setupMethod1(testCase)
            testCase.assumeEqual(1,0)
            % remaining test code is not exercised
        end
        function setupMethod2(testCase)
            disp('* Running setupMethod2 *')
            testCase.assertEqual(1,1)
        end
    end

 업데이트된 ExampleTest 클래스 정의

테스트를 실행하면 프레임워크가 TestMethodSetup 블록에서 가정(Assumption) 실패가 없는 모든 메서드를 실행 완료하고 Test 블록의 모든 메서드를 미완료 상태로 표시하는 것을 확인할 수 있습니다.

ts = matlab.unittest.TestSuite.fromClass(?ExampleTest);
res = ts.run;
Running ExampleTest

================================================================================
ExampleTest/testA was filtered.
    Details
================================================================================
* Running setupMethod2 *
.
================================================================================
ExampleTest/testB was filtered.
    Details
================================================================================
* Running setupMethod2 *
.
================================================================================
ExampleTest/testC was filtered.
    Details
================================================================================
* Running setupMethod2 *
.
Done ExampleTest
__________

Failure Summary:

     Name               Failed  Incomplete  Reason(s)
    ================================================================
     ExampleTest/testA              X       Filtered by assumption.
    ----------------------------------------------------------------
     ExampleTest/testB              X       Filtered by assumption.
    ----------------------------------------------------------------
     ExampleTest/testC              X       Filtered by assumption.

Test 메서드는 변경되지 않았지만 TestMethodSetup 블록의 가정 실패로 인해 세 개 모두 필터링되었습니다. 테스트 프레임워크는 setupMethod2처럼 가정 실패가 없는 TestMethodSetup 블록의 메서드를 실행합니다. 예상대로, 테스트 프레임워크는 각 Test 메서드 전에 한 번씩, setupMethod2를 3회 실행합니다.

클래스 설정(Setup) 코드와 해제(Teardown) 코드

TestClassSetup 또는 TestClassTeardown 특성(Attribute)이 있는 TestCase 메서드 내에서 가정(Assumption) 실패가 발생하는 경우, MATLAB이 전체 TestCase 클래스를 필터링합니다.

ExampleTest.m 내의 다음 TestClassSetup 블록에 있는 메서드에는 가정 실패가 있습니다.

    methods(TestClassSetup)
        function setupClass(testCase)
            testCase.assumeEqual(1,0)
            % remaining test code is not exercised
        end
    end

 업데이트된 ExampleTest 클래스 정의

테스트를 실행하면 프레임워크가 TestMethodSetup 또는 Test 내의 어떤 메서드도 실행하지 않는 것을 볼 수 있습니다.

ts = matlab.unittest.TestSuite.fromClass(?ExampleTest);
res = ts.run;
Running ExampleTest

================================================================================
All tests in ExampleTest were filtered.
    Details
================================================================================

Done ExampleTest
__________

Failure Summary:

     Name               Failed  Incomplete  Reason(s)
    ================================================================
     ExampleTest/testA              X       Filtered by assumption.
    ----------------------------------------------------------------
     ExampleTest/testB              X       Filtered by assumption.
    ----------------------------------------------------------------
     ExampleTest/testC              X       Filtered by assumption.

Test 메서드와 TestMethodSetup 메서드가 변경되지 않았지만 TestClassSetup 블록 내의 가정 실패로 인해 모두 필터링되었습니다.

참고 항목

| |