exponenta event banner

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

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

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

Связанные темы