Main Content

matlab.unittest.diagnostics.FigureDiagnostic 클래스

네임스페이스: matlab.unittest.diagnostics

지정된 Figure를 저장하는 진단

설명

FigureDiagnostic 클래스를 사용하여, Figure를 파일에 저장하는 진단을 생성합니다. 이 파일은 MATLAB®이 테스트 실행을 완료한 후에도 유지되므로 테스트 후 검사에 사용할 수 있습니다.

생성

FigureDiagnostic(fig)는 지정된 Figure를 저장하는 진단을 생성합니다. 테스트 프레임워크는 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 파일로만 저장하고 접두사 'Figure_' 대신 접두사 'LoggedFigure_'를 사용합니다.

입력 인수

모두 확장

테스트 프레임워크가 FigureDiagnostic 인스턴스를 진단할 때 저장할 Figure로, figure 함수나 uifigure 함수를 사용하여 만든 Figure 객체로 지정됩니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: FigureDiagnostic(testFig,'Formats','fig')

Figure의 파일 형식으로, ["fig" "png"], "fig" 또는 "png"로 지정됩니다. 이 값은 {'fig','png'}, 'fig' 또는 'png'와 같은 문자형 벡터로 지정할 수 있습니다. MATLAB은 이 값을 객체 내에 문자열로 저장합니다.

파일 이름 접두사로, 텍스트로 지정됩니다. 접두사를 지정하지 않을 경우 디폴트 접두사는 'Figure_'입니다. 문자형 벡터나 string형 스칼라로 값을 지정합니다. MATLAB은 이 값을 객체 내에 문자형 벡터로 저장합니다.

예: 'LoggedFigure_'

예: "TestFig-"

속성

모두 확장

테스트 프레임워크가 FigureDiagnostic 인스턴스를 진단할 때 저장할 Figure로, Figure 객체로 반환됩니다. Figure 속성은 읽기 전용이며, 생성 중에 값이 설정됩니다.

저장된 Figure의 파일 형식으로, ["fig" "png"], "fig" 또는 "png"로 반환됩니다. Formats 속성은 읽기 전용이며, 생성 중에 값이 설정됩니다.

파일 이름 접두사로, 문자형 벡터로 반환됩니다. 디폴트 접두사는 'Figure_'입니다. Prefix 속성은 읽기 전용이며, 생성 중에 값이 설정됩니다.

복사 의미 체계

핸들. 핸들 클래스가 복사 작업에 미치는 영향에 대한 내용은 객체 복사 항목을 참조하십시오.

예제

모두 축소

대화형 방식 사용을 위한 TestCase를 생성합니다.

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

Figure를 생성합니다.

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

FigureDiagnostic을 사용하여 Figure를 테스트 진단으로 저장합니다. Figure에 자식이 없는지 확인합니다. 이 가설 검정(Qualification)은 실패하고 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;

Figure를 생성합니다.

fig = uifigure;
ax = axes(fig);
surf(ax,membrane(6))

FigureDiagnostic을 사용하여 Figure를 테스트 진단으로 기록합니다. 파일을 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을 사용하여 Figure를 저장합니다.

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 test report. Please wait.
    Preparing content for the test report.
    Adding content to the test report.
    Writing test report to file.
Test report has been saved to:
 C:\wok\MyTestReport.pdf

results = 

  1×3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 1 Failed (rerun), 0 Incomplete.
   8.3355 seconds testing time.

세 번째 테스트의 테스트 진단 결과를 표시합니다. 테스트 프레임워크가 세 번째 테스트와 관련한 2개의 아티팩트를 저장했습니다. 기본적으로, FigureDiagnostic 객체는 Figure를 PNG 파일과 FIG 파일 모두로 저장합니다.

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

  DiagnosticResult with properties:

         Artifacts: [1×2 matlab.automation.diagnostics.FileArtifact]
    DiagnosticText: 'Figure saved to:↵--> C:\work\530aa31c-86c7-4712-a064-d9f00ce041fb\Figure_dfd8c611-8387-4579-804f-6384642ba4ff.fig↵--> C:\work\530aa31c-86c7-4712-a064-d9f00ce041fb\Figure_dfd8c611-8387-4579-804f-6384642ba4ff.png'

첫 번째 아티팩트의 저장된 위치를 표시합니다.

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

  FileArtifact with properties:

        Name: "Figure_dfd8c611-8387-4579-804f-6384642ba4ff.fig"
    Location: "C:\work\530aa31c-86c7-4712-a064-d9f00ce041fb"
    FullPath: "C:\work\530aa31c-86c7-4712-a064-d9f00ce041fb\Figure_dfd8c611-8387-4579-804f-6384642ba4ff.fig"

실패한 테스트와 관련한 이미지를 검사하려면 FullPath 필드에 표시된 위치에서 파일을 여십시오. 또한 PDF 테스트 보고서를 생성했으므로 이미지가 MyTestReport.pdf에 캡처됩니다. 테스트 보고서에는 아티팩트의 경로도 포함됩니다.

  • 저장된 Figure의 위치는 ArtifactsRootFolder에 들어 있는 폴더 내에서 테스트 실행에 대해 고유한 이름을 갖는 폴더입니다. TestRunner를 지정하지 않고 matlab.unittest.TestCase.forInteractiveUse를 사용하는 등의 방법으로 테스트를 실행할 경우 루트 폴더는 tempdir()로 반환된 값입니다.

  • 저장된 Figure의 경로를 확인하려면 특정 테스트 결과의 FileArtifact 객체에 액세스하십시오. 예를 들어 resTestResult 배열이라고 가정합니다. 다음과 같이 이 배열의 첫 번째 요소에 대해 저장된 Figure의 위치를 확인합니다.

    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에 개발됨