exponenta event banner

matlab.unittest.plugins. Класс FailOnWarningsPlugin

Пакет: matlab.unittest.plugins

Подключаемый модуль для неуспешных тестов, выдающих предупреждения

Описание

FailOnWarningsPlugin создает подключаемый модуль, который при добавлении в TestRunner, не проходит ни один тест, выдающий предупреждение. Подключаемый модуль вызывает сбой квалификации в области тестирования, который выдает предупреждение. Например, если общий испытательный прибор выдает предупреждение, то подключаемый модуль вызывает сбой квалификации на приборе и не выполняет все тесты, которые совместно используют этот прибор.

FailOnWarningsPlugin подключаемый модуль не приводит к сбою, если:

  • Тест учитывает предупреждение через ограничение, такое как IssuesWarnings или IssuesNoWarningsнезависимо от того, выполнено ли ограничение или нет.

  • Предупреждение отключено. Например, при отключении предупреждения с помощью SupressedWarningsFixture.

Строительство

matlab.unittest.plugins.FailOnWarningsPlugin создает подключаемый модуль, который не проходит какой-либо тест, выдающий предупреждение.

matlab.unittest.plugins.FailOnWarningsPlugin('Ignoring',warnIDs) создает подключаемый модуль, не отказывающий для указанных идентификаторов предупреждения, warnIDs.

Входные аргументы

развернуть все

Идентификаторы игнорируемых предупреждений, указанные как массив ячеек символьных векторов. Подключаемый модуль не завершает проверку предупреждений с идентификаторами, включенными в warnIDs.

Пример: FailOnWarningsPlugin('Ignoring',{'MATLAB:singularMatrix'})

Свойства

развернуть все

Ignore по умолчанию свойство пусто. Чтобы задать свойство как массив ячеек символьных векторов, используйте 'Ignoring' синтаксис при создании экземпляра плагина.

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

Ручка. Сведения о том, как классы обработки влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

Создать solve функция для решения набора линейных уравнений. Существует преднамеренная ошибка в solve функция - assert вызов, который проверяет, является ли матрица сингулярной, должен использовать rcond вместо det.

function x = solve(A,b)

assert(abs(det(A)) > 1e-12,... % intentional bug for illustrative purposes
    'The matrix is singular or nearly singular'); 

x = A\b;

Создайте следующий класс тестирования. В testTwo, A матрица является сингулярной, но поскольку в solve функция, assert вызов не перехватывает его.

classdef TestSolve < matlab.unittest.TestCase
    
    methods(Test)
        function testOne(testCase)
            A = eye(3);
            b = [3; 4; 1];
            testCase.verifyEqual(solve(A,b),b);
        end

        function testTwo(testCase)
            A = [1e-100 0; 0 1e100];
            b = [5; 5];
            expX = [5e100 5e-100];
            testCase.verifyEqual(solve(A,b),expX);
        end
    end
end

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

import matlab.unittest.TestRunner;
import matlab.unittest.TestSuite;
import matlab.unittest.plugins.FailOnWarningsPlugin;

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

Добавить FailOnWarningsPlugin и запустите тесты. testTwo не удается, потому что solve выдает предупреждение. Без FailOnWarningsPlugin, solve выдает предупреждение, но оба теста проходят.

runner.addPlugin(FailOnWarningsPlugin);
result = runner.run(suite);
Running TestSolve
.Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.000000e-200.
.
================================================================================
Verification failed in TestSolve/testTwo.

    ---------------------
    Framework Diagnostic:
    ---------------------
    TestSolve/testTwo issued warnings:    
        
        ---------------------------
        MATLAB:nearlySingularMatrix
        ---------------------------
        Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.000000e-200.
            In C:\work\solve.m (solve) at 6
            In C:\work\TestSolve.m (TestSolve.testTwo) at 14

    ------------------
    Stack Information:
    ------------------
    In C:\Program Files\MATLAB\R2015b\toolbox\matlab\testframework\+matlab\+unittest\+plugins\FailOnWarningsPlugin.m (FailOnWarningsPlugin.teardownTestMethod) at 164
================================================================================

Done TestSolve
__________

Failure Summary:

     Name               Failed  Incomplete  Reason(s)
    ================================================================
     TestSolve/testTwo    X                 Failed by verification.

Совет

  • Установите отображение трассировки предупреждающего стека с помощью warning функция. Например, warning('off','backtrace').

  • Отключить предупреждения с помощью SuppressedWarningsFixture класс.

Представлен в R2015b