Если непройденный тест вызывается неправильным или неполным кодом, полезно повторно выполнить проваленные тесты быстро и удобно. Когда вы запускаете тестовый набор, результаты испытаний включают информацию о тестовом наборе и исполнителе тестов. Если существуют непройденные тесты в результатах, когда 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
Создайте тестовый набор и запустите тесты. Тест 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 __________
Чтобы гарантировать, что все проходящие тесты продолжают передавать, повторно выполните полный тестовый набор.