Main Content

matlab.unittest.diagnostics.ScreenshotDiagnostic クラス

名前空間: matlab.unittest.diagnostics

スクリーンをイメージ ファイルとしてキャプチャする診断

説明

利用可能なスクリーンをイメージ ファイルとしてキャプチャする診断を作成するには、ScreenshotDiagnostic クラスを使用します。MATLAB® がテストの実行を完了した後もファイルは存続するため、ファイルをテスト後の検査に使用できます。

構築

ScreenshotDiagnostic() は利用可能なスクリーンをイメージ ファイルとしてキャプチャする診断を作成します。テスト フレームワークは、ScreenshotDiagnostic インスタンスを診断するときにスクリーンショットを PNG ファイルに保存します。各ファイルは、接頭辞 (既定は Screenshot_')、自動生成された識別子、およびファイル拡張子で構成される一意の名前をもちます。ファイル名の例は、Screenshot_cf95fe7f-5a7c-4310-9c49-16c0c18a969f.png です。ファイルの場所を表示するには、TestResult インスタンスを介して FileArtifact オブジェクトにアクセスします。

ScreenshotDiagnostic('Prefix',prefix) は、指定された接頭辞で始まる名前をもつファイルにスクリーンショットを保存する診断を作成します。

入力引数

すべて展開する

ファイル名の接頭辞。テキストとして指定します。接頭辞を指定しない場合、既定の接頭辞は 'Screenshot_' です。値を文字ベクトルまたは string スカラーとして指定します。MATLAB は、これらを文字ベクトルとしてオブジェクト内に保存します。

例: 'LoggedScreenshot_'

例: "TestScreenshot-"

プロパティ

すべて展開する

ファイル名の接頭辞。文字ベクトルとして返されます。既定の接頭辞は 'Screenshot_' です。Prefix プロパティは読み取り専用で、その値は作成中に設定されます。

コピーのセマンティクス

ハンドル。コピー操作に対するハンドル クラスの影響については、オブジェクトのコピーを参照してください。

すべて折りたたむ

対話型で使用する TestCase を作成します。

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

ScreenshotDiagnostic を使用して、デスクトップのイメージをテスト診断として保存します。

import matlab.unittest.diagnostics.ScreenshotDiagnostic
testCase.verifyTrue(false,ScreenshotDiagnostic)
Interactive verification failed.

----------------
Test Diagnostic:
----------------
Screenshot captured to:
--> C:\work\Temp\Screenshot_e99834ed-75e9-4ee1-9596-2f95e64b0ff1.png

---------------------
Framework Diagnostic:
---------------------
verifyTrue failed.
--> The value must evaluate to "true".

Actual logical:
       0

対話型で使用する TestCase を作成します。

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

ScreenshotDiagnostic を使用して、カスタム接頭辞付きのテスト診断としてデスクトップのイメージのログを記録します。

import matlab.unittest.diagnostics.ScreenshotDiagnostic
testCase.log(ScreenshotDiagnostic('Prefix','LoggedScreenshot_'))
Interactive diagnostic logged.
Screenshot captured to:
--> C:\work\Temp\LoggedScreenshot_35bb1ecb-441a-4f79-9f59-8b18ac3f9d12.png

現在の作業フォルダーのファイル内に、ScreenShotExampleTest テスト クラスを作成します。failingTest テスト メソッドは、失敗した場合 (この例では常に失敗する) に、後で確認できるように ScreenshotDiagnostic を使用してスクリーンのイメージをキャプチャします。logScreenshotTest テストは常にスクリーンのイメージをキャプチャし、LoggedScreenshot_ という接頭辞付きのファイルにイメージを保存します。

classdef ScreenShotExampleTest < matlab.unittest.TestCase
    methods (Test)
        function passingTest(testCase)
            testCase.verifyEqual(7,4+3);
        end
        function failingTest(testCase)
            import matlab.unittest.diagnostics.ScreenshotDiagnostic
            testCase.verifyFalse(true,ScreenshotDiagnostic);
        end
        function logScreenshotTest(testCase)
            import matlab.unittest.diagnostics.ScreenshotDiagnostic
            testCase.verifySubstring("Some Long Message","sage");
            testCase.log(1,ScreenshotDiagnostic('Prefix','LoggedScreenshot_'));
        end
    end
end

テストを実行します。

res = runtests('ScreenShotExampleTest');
Running ScreenShotExampleTest
.
================================================================================
Verification failed in ScreenShotExampleTest/failingTest.

    ----------------
    Test Diagnostic:
    ----------------
    Screenshot captured to:
    --> C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\Screenshot_b24f2219-61a4-4cf8-b4da-fe7e10da92bd.png

    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyFalse failed.
    --> The value must evaluate to "false".
    
    Actual logical:
           1

    ------------------
    Stack Information:
    ------------------
    In C:\work\ScreenShotExampleTest.m (ScreenShotExampleTest.failingTest) at 8
================================================================================
.   [Terse] Diagnostic logged (2016-12-22T11:21:54): 
Screenshot captured to:
--> C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\LoggedScreenshot_26def240-9a9d-4147-9d3e-c399ae157c0f.png

.
Done ScreenShotExampleTest
__________

Failure Summary:

     Name                               Failed  Incomplete  Reason(s)
    ================================================================================
     ScreenShotExampleTest/failingTest    X                 Failed by verification.

コマンド ウィンドウでのフレームワーク診断は、スクリーンショットがキャプチャされたことを示します。これらの場所には、テスト結果の診断記録を介してプログラムからアクセスすることもできます。

2 番目のテストは失敗するため、スクリーンショットはテスト診断の一部として保存されます。スクリーンショットのパスには、TestDiagnosticResultsArtifacts オブジェクトを介してアクセスします。

res(2).Details.DiagnosticRecord.TestDiagnosticResults.Artifacts.FullPath
ans = 

    "C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\Screenshot_b24f2219-61a4-4cf8-b4da-fe7e10da92bd.png"

3 番目のテストはパスし、スクリーンショットはログに記録された診断 (TestCaselog メソッドによる) の一部として保存されます。スクリーンショットのパスには、LoggedDiagnosticResultsArtifacts オブジェクトを介してアクセスします。

res(3).Details.DiagnosticRecord.LoggedDiagnosticResults.Artifacts.FullPath
ans = 

    "C:\Temp\bf0e26d1-8d47-4462-b1f2-673c7d35c236\LoggedScreenshot_26def240-9a9d-4147-9d3e-c399ae157c0f.png"

ヒント

  • スクリーンショットの保存場所は、ArtifactsRootFolder に含まれるフォルダー内で、テストの実行に対して一意の名前をもつフォルダーです。対話型のテストを実行している場合、ルート フォルダーの場所は tempdir() で返された値です。

  • 保存したスクリーンショットのパスを判別するには、特定のテスト結果の FileArtifact オブジェクトにアクセスします。たとえば、TestResult 配列 res があると仮定します。配列の最初の要素に関して保存した Figure の場所を、次のように判別します。

    res(1).Details.DiagnosticRecord.TestDiagnosticResults.Artifacts
    ans = 
    
      FileArtifact with properties:
    
            Name: "Screenshot_f51601ef-86bc-499c-bcec-203969f72a85.png"
        Location: "C:\work\Temp\1f4d3b64-3201-4bde-92ed-ad6859e97051"
        FullPath: "C:\work\Temp\1f4d3b64-3201-4bde-92ed-ad6859e97051\Screenshot_f51601ef-86bc-499c-bcec-203969f72a85.png"
    
  • macOS システムを使用している場合は、[システム環境設定] で、[ターミナル] アプリが画面の内容を記録できるようにします。この許可により、ScreenshotDiagnostic が画面をイメージ ファイルとしてキャプチャする際に MATLAB デスクトップなどの開いているウィンドウを含めることができるようになります。

バージョン履歴

R2017a で導入