exponenta event banner

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

Пакет: matlab.unittest.plugins

Подключаемый модуль для записи диагностики по результатам теста

Описание

DiagnosticsRecordingPlugin обеспечивает программный доступ к диагностической информации из модульных тестов.

Этот класс создает подключаемый модуль для записи диагностики результатов теста. TestRunner регистрирует эту диагностику как DiagnosticRecord массивы в Details имущества TestResult объект. Каждый элемент DiagnosticRecord массив соответствует событию в отдельном тесте.

При выполнении тестов с помощью runtests функция, testrunner функция без ввода или run способ TestSuite или TestCase, тестовый фреймворк использует этот плагин по умолчанию. Кроме того, при выполнении тестов производительности с помощью runperf функции или run способ TimeExperiment, тестовый фреймворк использует этот плагин по умолчанию.

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

matlab.unittest.plugins.DiagnosticsRecordingPlugin создает подключаемый модуль для записи результатов диагностики. По умолчанию DiagnosticsRecordingPlugin регистрирует сбои квалификации и регистрируемые события.

matlab.unittest.plugins.DiagnosticsRecordingPlugin(Name,Value) создает подключаемый модуль с дополнительными параметрами, заданными одним или несколькими Name,Value аргументы пары. Name должно отображаться внутри отдельных кавычек (''). Можно указать несколько аргументов пары имя-значение в любом порядке как Name1,Value1,...,NameN,ValueN.

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

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

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: matlab.unittest.plugins.DiagnosticsRecordingPlugin('IncludingPassingDiagnostics',true) создает подключаемый модуль, который записывает прохождение диагностики в дополнение к диагностике неудачных квалификаций и зарегистрированных событий.

Следует ли записывать диагностику из прошедших тестов, указано как false или true. По умолчанию плагин не записывает диагностику из прошедших тестов.

Типы данных: logical

Максимальный уровень, при котором регистрируемая диагностика записывается экземпляром плагина, задаваемый как целое значение от 0 до 4, или как matlab.unittest.Verbosity объект перечисления. Плагин записывает диагностику, которая регистрируется на этом уровне и ниже. Целочисленные значения соответствуют членам matlab.unittest.Verbosity перечисление.

По умолчанию плагин записывает диагностику, зарегистрированную в matlab.unittest.Verbosity.Terse уровень (уровень 1). Чтобы исключить диагностику в журнале, укажите LoggingLevel как Verbosity.None (уровень 0).

Диагностика в журнале - это диагностика, поставляемая в среду тестирования с вызовом log (TestCase) или log (Fixture) способ.

Числовое представлениеИмя элемента перечисленияПодробное описание
0None

Нет информации

1Terse

Минимальная информация

2Concise

Умеренный объем информации

3Detailed

Некоторая дополнительная информация

4Verbose

Много дополнительной информации

Уровень детализации для записанных событий, заданный как целое значение от 0 до 4 или как matlab.unittest.Verbosity объект перечисления. Целочисленные значения соответствуют членам matlab.unittest.Verbosity перечисление.

Подключаемый модуль записывает проходящие, сбойные и регистрируемые события с объемом детализации, указанным в OutputDetail. По умолчанию плагин записывает события в matlab.unittest.Verbosity.Detailed уровень (уровень 3).

Числовое представлениеИмя элемента перечисленияПодробное описание
0None

Нет информации

1Terse

Минимальная информация

2Concise

Умеренный объем информации

3Detailed

Некоторая дополнительная информация

4Verbose

Много дополнительной информации

Свойства

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

Это свойство доступно только для чтения.

Индикатор регистрации диагностики проходящих событий, возвращаемый как false или true. Это свойство имеет значение false по умолчанию. Вы можете указать его как true во время строительства.

Типы данных: logical

Это свойство доступно только для чтения.

Максимальный уровень полноты для зарегистрированной диагностики, записанной плагином, возвращаемый как matlab.unittest.Verbosity объект перечисления. Плагин записывает диагностику, которая регистрируется на этом уровне и ниже. По умолчанию это свойство имеет значение matlab.unittest.Verbosity.Terse. Во время построения плагина можно указать другой уровень регистрации.

Диагностика в журнале - это диагностика, поставляемая в среду тестирования с вызовом log (TestCase) или log (Fixture) способ.

Это свойство доступно только для чтения.

Уровень отображения сведений о событии, возвращаемый как matlab.unittest.Verbosity объект перечисления. Подключаемый модуль отображает передаваемые, сбойные и регистрируемые события с объемом детализации, указанным в OutputDetail. По умолчанию это свойство имеет значение matlab.unittest.Verbosity.Detailed. При построении плагина можно указать другой элемент вывода.

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

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

Примеры

свернуть все

В рабочей папке создайте файл, ExampleTest.m, содержащий следующий класс теста. Цель этого теста состоит в том, чтобы проиллюстрировать, как использовать DiagnosticsRecordingPlugin плагин, и он не предназначен для репрезентативного модульного теста.

classdef ExampleTest < matlab.unittest.TestCase  
    methods (Test)
        function testA(testCase)
            testCase.log(1,'Terse log message') 	% logs
            testCase.log(3,'Detailed log message') 	% logs
            testCase.verifyEqual(3+2,5)             % passes
            testCase.assumeTrue(true)               % passes
            testCase.verifyGreaterThan(5, 9)        % fails
            testCase.assertEqual(3.14,pi)           % fails/incomplete
        end
        function testB(testCase)
            % This test contains an intentional error - passing a character
            % instead of a variable to the ones function.
            a = [1 2];
            testCase.verifyEqual(ones('a'),[1 1]);  % errors
        end
    end
end

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

suite   = testsuite('ExampleTest');

Создайте тестовый питатель без подключаемых модулей. Этот код создает бесшумный питатель и обеспечивает полный контроль над установленными подключаемыми модулями. Добавить DiagnosticsRecordingPlugin на испытательный питатель.

import matlab.unittest.TestRunner;
import matlab.unittest.plugins.DiagnosticsRecordingPlugin;

runner = TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin);

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

results = runner.run(suite);

Просмотрите результат второго теста. Тест завершается неуспешно и является неполным.

results(2)
ans = 

  TestResult with properties:

          Name: 'ExampleTest/testB'
        Passed: 0
        Failed: 1
    Incomplete: 1
      Duration: 7.8912e-04
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed, 1 Incomplete.
   0.00078912 seconds testing time.

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

results(2).Details.DiagnosticRecord
ans = 

  ExceptionDiagnosticRecord with properties:

                          Event: 'ExceptionThrown'
                     EventScope: TestMethod
                  EventLocation: 'ExampleTest/testB'
                      Exception: [1×1 MException]
    AdditionalDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Error occurred in ExampleTest/testB and it did not run to completion…'

Тест бросает непроверенное исключение.

Сбор диагностических записей для первого теста, testA.

testA_records = results(1).Details.DiagnosticRecord
testA_records = 

  1×3 heterogeneous DiagnosticRecord (LoggedDiagnosticRecord, QualificationDiagnosticRecord) array with properties:

    Event
    EventScope
    EventLocation
    Stack
    Report

Просмотр событий, записанных плагином для testA.

{testA_records.Event}'
ans =

  3×1 cell array

    {'DiagnosticLogged'  }
    {'VerificationFailed'}
    {'AssertionFailed'   }

Подключаемый модуль записывает сообщение, зарегистрированное в Terse уровень детализации, а также сбои проверки и утверждения.

Создайте подключаемый модуль, который записывает сообщения на всех уровнях детализации и включает в себя прохождение диагностики. Повторно запустите тесты и соберите диагностические записи для testA.

runner = TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin(...
    'IncludingPassingDiagnostics',true,'OutputDetail',4,'LoggingLevel',4));
results = runner.run(suite);
testA_records = results(1).Details.DiagnosticRecord;

Просмотр событий, записанных плагином для testA.

{testA_records.Event}'
ans =

  6×1 cell array

    {'DiagnosticLogged'  }
    {'DiagnosticLogged'  }
    {'VerificationPassed'}
    {'AssumptionPassed'  }
    {'VerificationFailed'}
    {'AssertionFailed'   }

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

Выберите все записи с диагностикой неудачных событий.

failedRecords = selectFailed(testA_records)
failedRecords = 

  1×2 QualificationDiagnosticRecord array with properties:

    Event
    EventScope
    EventLocation
    TestDiagnosticResults
    FrameworkDiagnosticResults
    AdditionalDiagnosticResults
    Stack
    Report

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

passedRecords = selectPassed(testA_records);
passedRecords(1).Report
ans =

    'Verification passed in ExampleTest/testA.
     
         ---------------------
         Framework Diagnostic:
         ---------------------
         verifyEqual passed.
         --> The values are equal using "isequaln".
         
         Actual Value:
              5
         Expected Value:
              5
     
         ------------------
         Stack Information:
         ------------------
         In C:\work\ExampleTest.m (ExampleTest.testA) at 6'

Выберите все записи для незавершенных событий.

incompleteRecords = selectIncomplete(testA_records)
incompleteRecords = 

  QualificationDiagnosticRecord with properties:

                          Event: 'AssertionFailed'
                     EventScope: TestMethod
                  EventLocation: 'ExampleTest/testA'
          TestDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
     FrameworkDiagnosticResults: [1×1 matlab.unittest.diagnostics.DiagnosticResult]
    AdditionalDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Assertion failed in ExampleTest/testA and it did not run to completion…'

Поскольку это событие является ошибкой утверждения, инфраструктура также возвращает эту запись с неисправной диагностикой как failedRecords(2).

Выберите все записи с зарегистрированными событиями и просмотрите зарегистрированные сообщения.

loggedRecords = selectLogged(testA_records);
{loggedRecords.Report}'
ans =

  2×1 cell array

    {'[Terse] Diagnostic logged (2018-04-12 13:15:23): Terse log message'      }
    {'[Detailed] Diagnostic logged (2018-04-12 13:15:23): Detailed log message'}
Представлен в R2016a