Повторно выполните проваленные тесты

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

Чтобы гарантировать, что все проходящие тесты продолжают передавать, повторно выполните полный тестовый набор.

Похожие темы