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

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

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

Похожие темы

Была ли эта тема полезной?