Если непройденный тест вызван неправильным или неполным кодом, полезно перезапустить неудачные тесты быстро и удобно. Когда вы запускаете тестовый пакет, результаты тестирования включают информацию о тестовом наборе и исполнителе тестов. Если в результатах есть непройденные тесты, когда 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
Создайте тестовый набор и запустите тесты. The testSquare
не пройден тест из-за реализации exampleFunction
неправильный.
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
массив 1x2, содержащий все тесты в exampleTest.m
, и ans
массив 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
Чтобы программно перезапустить неудачные тесты, используйте Failed
свойство на TestResult
объект для создания и запуска фильтрованного тестового набора.
failedTests = suite([results.Failed]); result2 = run(failedTests);
Running exampleTest . Done exampleTest __________
Чтобы убедиться, что все проходящие тесты продолжают проходить, перезапустите полный тестовый набор.