Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MATLAB ユニット テスト プラグインを使用したアーティファクトの生成

MATLAB® ユニット テスト フレームワークでは、matlab.unittest.plugins パッケージのプラグイン クラスを使用してテスト ランナーをカスタマイズできます。以下のプラグイン クラスのいくつかを使用して、継続的インテグレーション (CI) プラットフォームと互換性のあるテスト レポートおよびアーティファクトを生成できます。

また、Simulink® Test™ テスト ケースの実行時に CI 互換のアーティファクトを生成することもできます。詳細については、Output Results for Continuous Integration Systems (Simulink Test)を参照してください。

カスタマイズされたテスト ランナーによるテストの実行

この例では、テスト スイートを作成して、テスト実行の進行状況をレポートして CI 互換のアーティファクトを生成するようにテスト ランナーをカスタマイズする方法を示します。

現在のフォルダー内のファイルに、2 次多項式の根を返す関数 quadraticSolver を作成します。

function roots = quadraticSolver(a,b,c)
% quadraticSolver returns solutions to the
% quadratic equation a*x^2 + b*x + c = 0.

if ~isa(a,"numeric") || ~isa(b,"numeric") || ~isa(c,"numeric")
    error("quadraticSolver:InputMustBeNumeric", ...
        "Coefficients must be numeric.")
end

roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a);

end

quadraticSolver をテストするために、現在のフォルダーにテスト クラス SolverTest を作成します。

classdef SolverTest < matlab.unittest.TestCase
    methods(Test)
        function realSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2 1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function imaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function nonnumericInput(testCase)
            testCase.verifyError(@()quadraticSolver(1,"-3",2), ...
                "quadraticSolver:InputMustBeNumeric")
        end
    end
end

コマンド プロンプトで、SolverTest クラスからテスト スイートを作成します。

suite = testsuite("SolverTest");

matlab.unittest.TestRunner.withTextOutputメソッドを使用して出力を生成する TestRunner インスタンスを作成します。このメソッドでは、ログ記録される診断の最大詳細レベルと、テスト イベント詳細の表示レベルを設定できます。この例のテスト ランナーは、テスト実行の進行状況を matlab.automation.Verbosity.Detailed レベル (レベル 3) で表示します。

import matlab.unittest.TestRunner
runner = TestRunner.withTextOutput("OutputDetail",3);

出力をファイル testreport.pdf に送信する TestReportPlugin インスタンスを作成し、このプラグインをテスト ランナーに追加します。

import matlab.unittest.plugins.TestReportPlugin
pdfFile = "testreport.pdf";
p1 = TestReportPlugin.producingPDF(pdfFile);
runner.addPlugin(p1)

JUnit スタイルの XML 出力をファイル junittestresults.xml に書き込む XMLPlugin インスタンスを作成します。次に、このプラグインをテスト ランナーに追加します。

import matlab.unittest.plugins.XMLPlugin
xmlFile = "junittestresults.xml";
p2 = XMLPlugin.producingJUnitFormat(xmlFile);
runner.addPlugin(p2)

ファイル quadraticSolver.m 内のソース コードの Cobertura コード カバレッジ レポートを出力するプラグインを作成します。出力をファイル cobertura.xml に書き込むようにプラグインに命令して、プラグインをテスト ランナーに追加します。

import matlab.unittest.plugins.CodeCoveragePlugin
import matlab.unittest.plugins.codecoverage.CoberturaFormat
sourceCodeFile = "quadraticSolver.m";
reportFile = "cobertura.xml";
reportFormat = CoberturaFormat(reportFile);
p3 = CodeCoveragePlugin.forFile(sourceCodeFile,"Producing",reportFormat);
runner.addPlugin(p3)

テストを実行します。

results = runner.run(suite)
 Running SolverTest
  Setting up SolverTest
  Done setting up SolverTest in 0 seconds
   Running SolverTest/realSolution
   Done SolverTest/realSolution in 0.026211 seconds
   Running SolverTest/imaginarySolution
   Done SolverTest/imaginarySolution in 0.48367 seconds
   Running SolverTest/nonnumericInput
   Done SolverTest/nonnumericInput in 0.51094 seconds
  Tearing down SolverTest
  Done tearing down SolverTest in 0 seconds
 Done SolverTest in 1.0208 seconds
__________

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:\work\testreport.pdf

results = 

  1×3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   3 Passed, 0 Failed, 0 Incomplete.
   1.0208 seconds testing time.

現在のフォルダー内のファイルをリストします。3 つの指定されたアーティファクトが現在のフォルダーに保存されています。

dir
.                                                     
..                                                    
GenerateArtifactsUsingMATLABUnitTestPluginsExample.m  
SolverTest.m                                          
cobertura.xml                                         
html                                                  
junittestresults.xml                                  
metadata                                              
quadraticSolver.m                                     
testreport.pdf                                        


生成されたアーティファクトを CI プラットフォーム上で処理できます。また、生成されたアーティファクトの内容を表示することもできます。たとえば、PDF のテスト レポートを開きます。

open("testreport.pdf")

参考

クラス

名前空間

関連するトピック