matlab.unittest.plugins.StopOnFailuresPlugin class

Пакет: matlab.unittest.plugins

Плагин для отладки непройденных тестов

Описание

The StopOnFailuresPlugin класс предоставляет плагин, который поможет отлаживать непройденные тесты. Добавление StopOnFailuresPlugin к исполнителю тестов пауз выполнению теста, если он сталкивается с отказом проверки или неоткрытой ошибкой и помещает MATLAB® в режим отладки.

Если StopOnFailuresPlugin сталкивается с отказом проверки или с неуспешной ошибкой в тесте, можно использовать команды отладки MATLAB, такие как dbstep, dbcont, и dbquit, чтобы выяснить причину непройденного теста. В случае неотключенной ошибки в тесте вы не можете использовать dbup чтобы переместить контекст в источник непройденного теста, поскольку ошибка нарушает работу стека.

Конструкция

matlab.unittest.plugins.StopOnFailuresPlugin создает плагин для отладки непройденных тестов.

matlab.unittest.plugins.StopOnFailuresPlugin('IncludingAssumptionFailures',tf) указывает, реагировать ли на отказы в допущении. По умолчанию StopOnFailuresPlugin реагирует только на незакрытые ошибки и верификацию, утверждения и критическое утверждение ошибки квалификации. Однако, когда 'IncludingAssumptionFailures' установлено в trueплагин также реагирует на отказы в допущении.

Входные параметры

расширить все

Индикатор для реакции на отказы в допущении, заданный как логический false или true. Когда это значение true, исполнитель тестов реагирует на отказы предположений. Когда значение falseплагин игнорирует отказы в допущении.

Свойства

IncludeAssumptionFailures

Когда это значение свойства true, образец реагирует на отказы в допущении. Когда значение falseобразец игнорирует отказы в допущении. The IncludeAssumptionFailures свойство false по умолчанию. Чтобы задать свойство следующим true, используйте IncludingAssumptionFailures вход при построении образца.

Копировать семантику

Указатель. Чтобы узнать, как классы handle влияют на операции копирования, см. раздел «Копирование объектов».

Примеры

свернуть все

В рабочей папке создайте файл ExampleTest.m содержащий следующий тестовый класс.

classdef ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testOne(testCase)  % Test fails
            act = 3.1416;
            exp = pi;
            testCase.verifyEqual(act, exp)
        end
        function testTwo(testCase)  % Test does not complete
            testCase.assumeEqual(5, 4)
        end
    end
end

В командной строке создайте тестовый набор из ExampleTest класс и исполнитель тестов.

import matlab.unittest.TestRunner
import matlab.unittest.TestSuite
import matlab.unittest.plugins.StopOnFailuresPlugin

suite = TestSuite.fromClass(?ExampleTest);
runner = TestRunner.withTextOutput;

Запустите тесты.

result = runner.run(suite);
Running ExampleTest

================================================================================
Verification failed in ExampleTest/testOne.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> The values are not equal using "isequaln".
    --> Failure table:
                Actual        Expected               Error               RelativeError    
                ______    ________________    ____________________    ____________________
            
                3.1416    3.14159265358979    7.34641020683213e-06    2.33843499679617e-06
    
    Actual double:
           3.141600000000000
    Expected double:
           3.141592653589793

    ------------------
    Stack Information:
    ------------------
    In C:\work\ExampleTest.m (ExampleTest.testOne) at 6
================================================================================
.
================================================================================
ExampleTest/testTwo was filtered.
    Details
================================================================================
.
Done ExampleTest
__________

Failure Summary:

     Name                 Failed  Incomplete  Reason(s)
    ==================================================================
     ExampleTest/testOne    X                 Failed by verification.
    ------------------------------------------------------------------
     ExampleTest/testTwo              X       Filtered by assumption.

В результате проверки в тестовом классе первый тест не проходит, а второй тест не завершается.

Добавьте StopOnFailuresPlugin и запустите тесты.

runner.addPlugin(StopOnFailuresPlugin)
result = runner.run(suite);
Running ExampleTest
Test execution paused due to failure. Either click here or execute DBUP to shift context to its source: line 6 of "C:\work\ExampleTest.m".

Во время выполнения теста, когда происходит отказ, MATLAB входит в режим отладки.

Щелкните гиперссылку 'here' чтобы переместить контекст отладки в рабочий источник. При необходимости сделайте командное окно своим активным окном.

In workspace belonging to ExampleTest>ExampleTest.testOne at 6

Исследуйте переменные в рабочей области.

whos
  Name          Size            Bytes  Class           Attributes

  act           1x1                 8  double                    
  exp           1x1                 8  double                    
  testCase      1x1               112  ExampleTest               

Теперь можно выяснить причину непройденного теста.

Для примера смотрите, проходит ли тест, когда вы задаете относительную погрешность 100*eps.

testCase.verifyEqual(act,exp,'RelTol',100*eps)
Verification failed in ExampleTest/testOne.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> The values are not equal using "isequaln".
    --> The error was not within relative tolerance.
    --> Failure table:
                Actual        Expected               Error               RelativeError         RelativeTolerance  
                ______    ________________    ____________________    ____________________    ____________________
            
                3.1416    3.14159265358979    7.34641020683213e-06    2.33843499679617e-06    2.22044604925031e-14
    
    Actual double:
           3.141600000000000
    Expected double:
           3.141592653589793

    ------------------
    Stack Information:
    ------------------
    In C:\work\ExampleTest.m (ExampleTest.testOne) at 6
================================================================================

Тест завершается неуспешно даже с заданным допуском.

Выход из режима отладки.

dbquit
================================================================================
Verification failed in ExampleTest/testOne.

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyEqual failed.
    --> The values are not equal using "isequaln".
    --> Failure table:
                Actual        Expected               Error               RelativeError    
                ______    ________________    ____________________    ____________________
            
                3.1416    3.14159265358979    7.34641020683213e-06    2.33843499679617e-06
    
    Actual double:
           3.141600000000000
    Expected double:
           3.141592653589793

    ------------------
    Stack Information:
    ------------------
    In C:\work\ExampleTest.m (ExampleTest.testOne) at 6
================================================================================
.
================================================================================
ExampleTest/testTwo was filtered.
    Details
================================================================================
.
Done ExampleTest
__________

Failure Summary:

     Name                 Failed  Incomplete  Reason(s)
    ==================================================================
     ExampleTest/testOne    X                 Failed by verification.
    ------------------------------------------------------------------
     ExampleTest/testTwo              X       Filtered by assumption.

Чтобы войти в режим отладки для тестов, которые не выполняются по предположениям, таких как testTwo в ExampleTest класс, включать 'IncludingAssumptionFailures' опция для плагина.

runner = TestRunner.withTextOutput;
runner.addPlugin(StopOnFailuresPlugin(...
    'IncludingAssumptionFailures', true))

Если вы запускаете исполнитель тестов, вы входите в режим отладки для обоих testOne и testTwo.

Введенный в R2013b