selectFailed

Класс: matlab.unittest.plugins.diagnosticrecord.DiagnosticRecord
Пакет: matlab.unittest.plugins.diagnosticrecord

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

Синтаксис

selectedRecords = selectFailed(records)

Описание

selectedRecords = selectFailed(records) возвращает диагностические записи для неудачных событий как массив matlab.unittest.plugins.diagnosticrecord.QualificationDiagnosticRecord и matlab.unittest.plugins.diagnosticrecord.ExceptionDiagnosticRecord образцы.

Неудачные события - это события, которые приводят к отказу на TestResult. Эти события включают отказы верификации, отказы в утверждении и незакрытые MException объекты.

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

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

Зарегистрированная диагностика на результате теста, заданная как массив matlab.unittest.plugins.diagnosticrecord.DiagnosticRecord образцы. Доступ к записанной диагностике через DiagnosticRecord поле в Details свойство на TestResult. Например, если результаты теста сохранены в переменной results, найдите зарегистрированную диагностику для второго теста путем вызова records = result(2).Details.DiagnosticRecord.

Примеры

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

В рабочей папке создайте файл, 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
Для просмотра документации необходимо авторизоваться на сайте