실패한 테스트 다시 실행하기
부정확하거나 불완전한 코드로 인해 테스트가 실패했다면 실패한 테스트를 빠르고 편리하게 다시 실행하면 유용할 것입니다. 테스트 스위트를 실행하면 테스트 결과에 테스트 스위트와 테스트 실행기에 대한 정보가 포함됩니다. 테스트가 실패한 경우, 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
변수에 저장합니다. results
는 exampleTest.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 __________
통과된 모든 테스트가 계속 통과하는지 확인하려면 전체 테스트 스위트를 다시 실행하십시오.