exponenta event banner

verifyError

Класс: matlab.unittest.qualifications.Verifable
Пакет: matlab.unittest.qualifications

Убедитесь, что функция выдает указанное исключение

Синтаксис

verifyError(verifiable,actual,identifier)
verifyError(verifiable,actual,metaClass)
verifyError(___,diagnostic)
[output1,...,outputN] = verifyError(___)

Описание

verifyError(verifiable,actual,identifier) проверяет, что actual - дескриптор функции, вызывающий исключение с идентификатором ошибки, равным identifier.

verifyError(verifiable,actual,metaClass) проверяет, что actual - дескриптор функции, вызывающий исключение, тип которого определяется параметром meta.class экземпляр, указанный в metaClass. Этот метод не требует, чтобы экземпляр был точным совпадением классов, но он должен находиться в указанной иерархии классов, и эта иерархия должна включать MException класс.

verifyError(___,diagnostic) также связывает диагностическую информацию в diagnostic с квалификацией. В зависимости от конфигурации тестового питателя платформа тестирования может отображать диагностику при прохождении или сбое квалификации. По умолчанию инфраструктура отображает диагностику только при сбое квалификации. Поведение по умолчанию можно переопределить, настроив тестовый питатель. Например, используйте DiagnosticsOutputPlugin для отображения диагностики сбоев и прохождения событий.

[output1,...,outputN] = verifyError(___) возвращает несколько выходных аргументов из вызова дескриптора функции actual. Этот синтаксис используется для управления количеством выходных аргументов, запрашиваемых дескриптором функции. Если функция обрабатывает ошибки, все выходы имеют тип missing. В противном случае output1,...,outputN являются выходными значениями из actual. Этот синтаксис можно использовать с любым из входных аргументов предыдущих синтаксисов.

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

verifiable

matlab.unittest.TestCase экземпляр, который используется для прохождения или неуспешного завершения проверки в сочетании с тестовой исполняемой платформой.

actual

Тестируемое значение.

identifier

Идентификатор ошибки, указанный как символьный вектор.

metaClass

Экземпляр meta.class.

diagnostic

Диагностическая информация, относящаяся к квалификации, указана как одно из следующих:

  • строковый массив

  • символьный массив

  • дескриптор функции

  • matlab.unittest.diagnostics.Diagnostic объект

Диагностические значения могут быть нескалярными. Дополнительные сведения см. в разделе matlab.unittest.diagnostics.Diagnostic.

Примеры

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

testCase = matlab.unittest.TestCase.forInteractiveUse;

% Passing scenarios
%%%%%%%%%%%%%%%%%%%%
verifyError(testCase, @() error('SOME:error:id','Error!'), 'SOME:error:id');
verifyError(testCase, @testCase.assertFail, ...
    ?matlab.unittest.qualifications.AssertionFailedException);
 
% Failing scenarios
%%%%%%%%%%%%%%%%%%%%
verifyError(testCase, 5, 'some:id', '5 is not a function handle');
verifyError(testCase, @testCase.verifyFail, ...
    ?matlab.unittest.qualifications.AssertionFailedException, ...
    'Verifications dont throw exceptions.');
verifyError(testCase, @() error('SOME:id'), 'OTHER:id', 'Wrong id');
verifyError(testCase, @() error('whoops'), ...
    ?matlab.unittest.qualifications.AssertionFailedException, ...
    'Wrong type of exception thrown');

Создать testNonNumericInput для проверки, выдает ли функция ожидаемое сообщение об ошибке, add5:InputMustBeNumeric, для неожиданного состояния, ввод: char.

Функция тестирования установки:

function res = add5(x)
% ADD5 Increment input by 5.
if ~isa(x,'numeric')
    error('add5:InputMustBeNumeric','Input must be numeric.')
end
res = x + 5;
end

TestCase класс, содержащий методы испытаний:

classdef Add5Test < matlab.unittest.TestCase
    methods (Test)
        function testDoubleOut(testCase)
            actOutput = add5(1);
            testCase.verifyClass(actOutput,'double')
        end
        function testNonNumericInput(testCase)
            testCase.verifyError(@()add5('0'),'add5:InputMustBeNumeric')
        end
    end
end

Создание набора тестов из Add5Test файл класса.

suite = matlab.unittest.TestSuite.fromFile('Add5Test.m')
result = run(suite);
Running Add5Test
..
Done Add5Test
__________

В текущей рабочей папке создайте следующую функцию для тестирования. Функция возвращает один выходной сигнал.

function y = plusOne(x)
    y = x+1;
end

В командной строке вызовите plusOne со слишком большим количеством выходных аргументов.

[~,~] = plusOne(41);
Error using plusOne
Too many output arguments.

Просмотрите сообщение об ошибке и идентификатор.

MException.last
ans = 

  MException with properties:

    identifier: 'MATLAB:TooManyOutputs'
       message: 'Too many output arguments.'
         cause: {0×1 cell}
         stack: [0×1 struct]

Убедитесь, что если plusOne функция вызывается со слишком большим количеством запрошенных выходных аргументов, она ошибается и ошибка имеет идентификатор MATLAB:TooManyOutputs.

testCase = matlab.unittest.TestCase.forInteractiveUse;
[~,~] = verifyError(testCase,@() plusOne(41),'MATLAB:TooManyOutputs');
Interactive verification passed.

Совет

  • Этот метод функционально эквивалентен:

    import matlab.unittest.constraints.Throws;
    verifiable.verifyThat(actual, Throws(identifier));
    verifiable.verifyThat(actual, Throws(metaClass));
    

    Существует больше функциональных возможностей при использовании Throws ограничение непосредственно через verifyThat.

  • Используйте условия проверки для создания и записи отказов без создания исключения. Так как проверки не вызывают исключений, все содержимое теста выполняется до завершения даже при возникновении ошибок проверки. Как правило, проверки являются основной квалификацией для единичного теста, поскольку они обычно не требуют раннего выхода из теста. Используйте другие типы квалификации для проверки на нарушение предварительных условий или неправильной настройки теста. В качестве альтернативы,

    • Для проверки соответствия среды тестирования предварительным условиям, которые в противном случае не приведут к сбою теста, используйте квалификационные требования. Предполагаемые отказы приводят к отфильтрованным тестам, и платформа тестирования помечает тесты как Incomplete. Дополнительные сведения см. в разделе matlab.unittest.qualifications.Assumable.

    • Используйте условия утверждения, когда условие отказа аннулирует остальную часть текущего содержимого теста, но не препятствует надлежащему выполнению последующих методов тестирования. Сбой в точке утверждения делает текущий метод тестирования неуспешным и неполным. Дополнительные сведения см. в разделе matlab.unittest.qualifications.Assertable.

    • Используйте условия неустранимого утверждения, чтобы прервать тестовый сеанс при сбое. Эти требования полезны, когда режим отказа настолько фундаментален, что нет смысла продолжать тестирование. Эта квалификация также полезна, когда отрыв приспособления не восстанавливает состояние MATLAB ® правильно, и предпочтительно прервать тестирование и начать новую сессию. Дополнительные сведения см. в разделеmatlab.unittest.qualifications.FatalAssertable.

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