Повторный запуск неудачных тестов

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

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

Похожие темы