Main Content

실패한 테스트 다시 실행하기

부정확하거나 불완전한 코드로 인해 테스트가 실패했다면 실패한 테스트를 빠르고 편리하게 다시 실행하면 유용할 것입니다. 테스트 스위트를 실행하면 테스트 결과에 테스트 스위트와 테스트 실행기에 대한 정보가 포함됩니다. 테스트가 실패한 경우, MATLAB에서 테스트 결과를 표시할 때 실패한 테스트를 다시 실행할 수 있는 링크가 나타납니다.

Totals:
   1 Passed, 1 Failed (rerun), 0 Incomplete.
   0.25382 seconds testing time.

이 링크를 사용하면 테스트 코드 또는 테스트 중인 코드를 수정한 후 실패한 테스트를 빠르게 다시 실행할 수 있습니다. 하지만 테스트 클래스를 구조적으로 변경하면 '다시 실행' 링크를 통해 변경 사항을 적용할 수 없습니다. 구조적 변경은 테스트 메서드의 추가, 삭제 또는 이름 변경과 테스트 파라미터 속성 및 속성값을 수정하는 것을 의미합니다. 이 경우, 변경 사항을 적용하려면 전체 테스트 스위트를 다시 생성하십시오.

현재 작업 폴더에서 다음 함수를 생성합니다. 이 함수는 제곱과 제곱근을 계산할 의도로 만들었습니다. 하지만 다음 예제에서 보면 값의 제곱 대신 세제곱을 계산하는 것을 알 수 있습니다.

function [x,y] = exampleFunction(n)
    validateattributes(n,{'numeric'},{'scalar'})
    
    x = n^3;     % square (incorrect code, should be n^2)
    y = sqrt(n); % square root
end

파일 exampleTest.m에 다음 테스트를 만듭니다.

function tests = exampleTest
    tests = functiontests(localfunctions);
end

function testSquare(testCase)
    [sqrVal,sqrRootVal] = exampleFunction(3);
    verifyEqual(testCase,sqrVal,9);
end

function testSquareRoot(testCase)
    [sqrVal,sqrRootVal] = exampleFunction(100);
    verifyEqual(testCase,sqrRootVal,10);
end

테스트 스위트를 만들고 테스트를 실행합니다. exampleFunction의 구현이 올바르지 않기 때문에 testSquare 테스트가 실패합니다.

suite = testsuite('ExampleTest.m');
results = run(suite)
Running exampleTest

================================================================================
Verification failed in exampleTest/testSquare.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> The values are not equal using "isequaln".
    --> Failure table:
            Actual    Expected    Error    RelativeError
            ______    ________    _____    _____________
        
              27         9         18            2      
    
    Actual Value:
        27
    Expected Value:
         9

    ------------------
    Stack Information:
    ------------------
    In C:\Work\exampleTest.m (testSquare) at 7
================================================================================
..
Done exampleTest
__________

Failure Summary:

     Name                    Failed  Incomplete  Reason(s)
    =====================================================================
     exampleTest/testSquare    X                 Failed by verification.
    

results = 

  1×2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   1 Passed, 1 Failed (rerun), 0 Incomplete.
   0.24851 seconds testing time.

exampleFunction의 코드를 업데이트하여 코딩 오류를 수정합니다.

function [x,y] = exampleFunction(n)
    validateattributes(n,{'numeric'},{'scalar'})
    
    x = n^2;     % square
    y = sqrt(n); % square root
end

명령 창에서 (rerun) 링크를 클릭하여 실패한 테스트를 다시 실행합니다. 테스트 결과를 저장하는 변수를 덮어쓰면 실패한 테스트를 다시 실행할 수 없습니다. 링크가 더 이상 명령 창에 나타나지 않으면 프롬프트에 results를 입력하여 링크를 표시할 수 있습니다.

Running exampleTest
.
Done exampleTest
__________


ans = 

  TestResult with properties:

          Name: 'exampleTest/testSquare'
        Passed: 1
        Failed: 0
    Incomplete: 0
      Duration: 0.0034
       Details: [1×1 struct]

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

MATLAB은 다시 실행하는 테스트와 연관된 TestResult 배열을 ans 변수에 저장합니다. resultsexampleTest.m의 모든 테스트가 포함된 1x2 배열이고, ans는 실패한 테스트 1개를 다시 실행한 결과가 포함된 1x1 배열입니다.

whos
   Name         Size            Bytes  Class                         Attributes

  ans          1x1               664  matlab.unittest.TestResult              
  results      1x2              1344  matlab.unittest.TestResult              
  suite        1x2                96  matlab.unittest.Test      

실패한 테스트를 프로그래밍 방식으로 다시 실행하려면 TestResult 객체에서 Failed 속성을 사용하여 필터링된 테스트 스위트를 생성하고 실행하십시오.

failedTests = suite([results.Failed]);
result2 = run(failedTests);
Running exampleTest
.
Done exampleTest
__________

통과된 모든 테스트가 계속 통과하는지 확인하려면 전체 테스트 스위트를 다시 실행하십시오.

관련 항목