matlab.unittest.diagnostics. Класс FigureDiagnostic

Пакет: matlab.unittest.diagnostics

Диагностика, чтобы сохранить заданную фигуру

Описание

Используйте класс FigureDiagnostic, чтобы создать диагностику, которая сохраняет фигуру в файл. Файл сохраняется после того, как MATLAB® завершает тестовый прогон, и таким образом, это доступно для контроля после испытания.

Конструкция

FigureDiagnostic(fig) создает диагностику, чтобы сохранить заданную фигуру. Когда среда тестирования диагностирует экземпляр FigureDiagnostic, она сохраняет fig в файл FIG и в файл PNG. Каждый файл имеет уникальное имя, состоящее из префикса ('Figure_', по умолчанию), автоматически сгенерированный идентификатор и расширение файла. Именем файла в качестве примера является Figure_cf95fe7f-5a7c-4310-9c19-16c0c17a969f.png. Чтобы просмотреть местоположение файла, получите доступ к объекту FileArtifact через экземпляр TestResult.

FigureDiagnostic(fig,Name,Value) создает диагностику с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value. Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN. Например, FigureDiagnostic(fig,'Prefix','LoggedFigure_','Formats','png') сохраняет fig как файл PNG только и использует префиксный 'LoggedFigure_' вместо 'Figure_'.

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

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

Фигурируйте, чтобы сохранить, когда среда тестирования диагностирует экземпляр FigureDiagnostic, заданный как объект Figure.

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: FigureDiagnostic(testFig,'Formats','fig')

Формат файла фигуры, заданной как ["fig" "png"], "fig" или "png". Можно задать эти значения как векторы символов, как {'fig','png'}, 'fig' или 'png'. В объекте MATLAB хранит их как строки.

Префикс имени файла, заданный как текст. Если вы не задаете префикс, префиксом по умолчанию является 'Figure_'. Задайте значение как вектор символов или представьте скаляр в виде строки. В объекте MATLAB хранит его как векторы символов.

Пример: 'LoggedFigure_'

Пример: "TestFig-"

Свойства

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

Фигурируйте, чтобы сохранить, когда среда тестирования диагностирует экземпляр FigureDiagnostic, возвращенный как объект Figure.  Свойство Figure только для чтения, и его значение  установлено во время конструкции.

Формат файла для сохраненной фигуры, возвращенной как ["fig" "png"], "fig" или "png".  Свойство Formats только для чтения, и его значение  установлено во время конструкции.

Префикс имени файла, возвращенный как вектор символов. Префиксом по умолчанию является 'Figure_'.  Свойство Prefix только для чтения, и его значение  установлено во время конструкции.

Примеры

свернуть все

Создайте TestCase для интерактивного использования.

import matlab.unittest.TestCase
testCase = TestCase.forInteractiveUse;

Создайте фигуру.

fig = figure;
ax = axes(fig);
surf(ax,peaks)

Используйте FigureDiagnostic, чтобы сохранить фигуру как тестовую диагностику. Проверьте, что у фигуры нет дочерних элементов. Эта проверка сбои и MATLAB отображает тестовую диагностику.

import matlab.unittest.diagnostics.FigureDiagnostic
testCase.verifyEmpty(fig.Children,FigureDiagnostic(fig))
Interactive verification failed.

----------------
Test Diagnostic:
----------------
Figure saved to:
--> C:\work\Temp\Figure_0b3da19f-5248-442b-aebf-3fb6d707fd1b.fig
--> C:\work\Temp\Figure_0b3da19f-5248-442b-aebf-3fb6d707fd1b.png

---------------------
Framework Diagnostic:
---------------------
verifyEmpty failed.
--> The value must be empty.
--> The value has a size of [1  1].

Actual matlab.graphics.axis.Axes:
      Axes with properties:
    
                 XLim: [0 50]
                 YLim: [0 60]
               XScale: 'linear'
               YScale: 'linear'
        GridLineStyle: '-'
             Position: [0.130000000000000 0.110000000000000 0.775000000000000 0.815000000000000]
                Units: 'normalized'
    
      Use get to show all properties

Создайте TestCase для интерактивного использования.

import matlab.unittest.TestCase
testCase = TestCase.forInteractiveUse;

Создайте фигуру.

fig = figure;
membrane(6)

Используйте FigureDiagnostic, чтобы регистрировать фигуру как тестовую диагностику. Сохраните файл только как PNG и используйте пользовательский префикс для имени файла.

import matlab.unittest.diagnostics.FigureDiagnostic
testCase.log(FigureDiagnostic(fig,'Formats',{'png'},'Prefix','LoggedFigure_'))
Interactive diagnostic logged.
Figure saved to:
--> C:\work\Temp\LoggedFigure_0a02faa1-3e14-4783-9954-b56caa6b326d.png

В файле в вашей текущей рабочей папке создайте тестовый класс FigurePropTest. Если метод тестирования failingTest перестал работать (он всегда делает в этом примере), он использует FigureDiagnostic, чтобы сохранить фигуру, таким образом, можно исследовать его позже.

classdef FigurePropTest < matlab.unittest.TestCase
    properties
        TestFigure
    end
    methods(TestMethodSetup)
        function createFigure(testCase)
            testCase.TestFigure = figure;
        end
    end
    methods(TestMethodTeardown)
        function closeFigure(testCase)
            close(testCase.TestFigure)
        end
    end
    methods(Test)
        function defaultCurrentPoint(testCase)
            cp = testCase.TestFigure.CurrentPoint;
            testCase.verifyEqual(cp,[0 0], ...
                'Default current point is incorrect')
        end
        function defaultCurrentObject(testCase)
            import matlab.unittest.constraints.IsEmpty
            co = testCase.TestFigure.CurrentObject;
            testCase.verifyThat(co,IsEmpty, ...
                'Default current object should be empty')
        end
        function failingTest(testCase)
            import matlab.unittest.diagnostics.FigureDiagnostic
            fig = testCase.TestFigure;
            ax = axes(fig);
            surf(ax,peaks)
            testCase.verifyEmpty(testCase.TestFigure.Children, ...
                FigureDiagnostic(testCase.TestFigure))
        end
    end
end

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

suite = testsuite('FigurePropTest');

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

import matlab.unittest.plugins.DiagnosticsRecordingPlugin
import matlab.unittest.plugins.TestReportPlugin
runner = matlab.unittest.TestRunner.withNoPlugins;
runner.addPlugin(DiagnosticsRecordingPlugin);
runner.addPlugin(TestReportPlugin.producingPDF('MyTestReport.pdf'));

Измените корень артефакта по умолчанию на свою текущую рабочую папку.

runner.ArtifactsRootFolder = pwd;

Запущение тестов. Третьи тестовые сбои.

results = runner.run(suite)
Generating report. Please wait.
    Preparing content for the report.
    Adding content to the report.
    Writing report to file.
Report has been saved to: C:\work\MyTestReport.pdf

results = 

  1×3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

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

Отобразите тестовые результаты диагностики для третьего теста. Среда тестирования сохраненные два артефакта, связанные с третьим тестом. По умолчанию объект FigureDiagnostic сохраняет фигуру и как файл PNG и как файл FIG.

results(3).Details.DiagnosticRecord.TestDiagnosticResults
ans = 

  DiagnosticResult with properties:

         Artifacts: [1×2 matlab.unittest.diagnostics.FileArtifact]
    DiagnosticText: 'Figure saved to:↵--> C:\work\715b5416-5c52-4a53-bbec-837a5db57392\Figure_284d9501-2121-45a1-bf5c-18904ce11e8f.fig↵--> C:\work\715b5416-5c52-4a53-bbec-837a5db57392\Figure_284d9501-2121-45a1-bf5c-18904ce11e8f.png'

Отобразите сохраненное местоположение первого артефакта.

results(3).Details.DiagnosticRecord.TestDiagnosticResults.Artifacts(1)
ans = 

  FileArtifact with properties:

        Name: "Figure_284d9501-2121-45a1-bf5c-18904ce11e8f.fig"
    Location: "C:\work\715b5416-5c52-4a53-bbec-837a5db57392"
    FullPath: "C:\work\715b5416-5c52-4a53-bbec-837a5db57392\Figure_284d9501-2121-45a1-bf5c-18904ce11e8f.fig"

Чтобы осмотреть изображение, связанное с проваленным тестом, откройте файл в местоположении, показанном в поле FullPath. Кроме того, поскольку вы сгенерировали протокол испытаний PDF, изображение получено в MyTestReport.pdf. Протокол испытаний также содержит путь к артефактам.

Советы

  • Местоположение сохраненной фигуры является папкой с именем, уникальным для тестового прогона в папке, содержавшейся в ArtifactsRootFolder. Если при запуске тест без TestRunner, например, с matlab.unittest.TestCase.forInteractiveUse, корневая папка является значением, возвращенным tempdir().

  • Чтобы определить путь сохраненной фигуры, получите доступ к объекту FileArtifact для конкретного результата испытаний. Например, примите, что res является массивом TestResult. Определите местоположение сохраненной фигуры для первого элемента массива можно следующим образом.

    res(1).Details.DiagnosticRecord.TestDiagnosticResults.Artifacts
    ans = 
    
      FileArtifact with properties:
    
            Name: "Figure_3984704d-b884-44c2-b3ee-7ed10d36e967.png"
        Location: "C:\mywork\Temp\a1f80242-8f8a-4678-9124-415980432d08"
        FullPath: "C:\mywork\Temp\a1f80242-8f8a-4678-9124-415980432d08\Figure_3984704d-b884-44c2-b3ee-7ed10d36e967.png"

Введенный в R2017a