MATLAB ユニット テスト プラグインを使用したアーティファクトの生成
MATLAB® ユニット テスト フレームワークでは、matlab.unittest.plugins 名前空間のプラグイン クラスを使用してテスト ランナーをカスタマイズできます。以下のプラグイン クラスのいくつかを使用して、継続的インテグレーション (CI) プラットフォームと互換性のあるテスト レポートおよびアーティファクトを生成できます。
matlab.unittest.plugins.TestReportPluginは、テスト ランナーにテスト結果のレポートを作成するように指示するプラグインを作成します。このプラグインを使用して、読み取りとアーカイブが可能なテスト レポートを作成できます。matlab.unittest.plugins.TAPPluginは Test Anything Protocol (TAP) ストリームを生成するプラグインを作成します。matlab.unittest.plugins.XMLPluginは、JUnit スタイルの XML 出力を生成するプラグインを作成します。matlab.unittest.plugins.CodeCoveragePluginは、MATLAB ソース コードのカバレッジ レポートを作成するプラグインを作成します。
また、Simulink® Test™ テスト ケースの実行時に CI 互換のアーティファクトを生成することもできます。詳細については、Output Results for Continuous Integration Systems (Simulink Test)を参照してください。
カスタマイズされたテスト ランナーによるテストの実行
この例では、テスト スイートを作成して、テスト実行の進行状況をレポートして CI 互換のアーティファクトを生成するようにテスト ランナーをカスタマイズする方法を示します。
現在のフォルダー内のファイルに、2 次多項式の根を返す関数 quadraticSolver を作成します。
function r = 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 r(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a); r(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.016834 seconds
Running SolverTest/imaginarySolution
Done SolverTest/imaginarySolution in 0.0043659 seconds
Running SolverTest/nonnumericInput
Done SolverTest/nonnumericInput in 0.0086213 seconds
Tearing down SolverTest
Done tearing down SolverTest in 0 seconds
Done SolverTest in 0.029822 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.
0.029822 seconds testing time.
現在のフォルダー内のファイルをリストします。3 つの指定されたアーティファクトが現在のフォルダーに保存されています。
dir
. .. GenerateArtifactsUsingMATLABUnitTestPluginsExample.m SolverTest.m cobertura.xml html junittestresults.xml metadata quadraticSolver.m testreport.pdf
生成されたアーティファクトを CI プラットフォーム上で処理できます。また、生成されたアーティファクトの内容を表示することもできます。たとえば、PDF のテスト レポートを開きます。
open("testreport.pdf")
参考
クラス
matlab.unittest.TestRunner|matlab.unittest.plugins.XMLPlugin|matlab.unittest.plugins.TAPPlugin|matlab.unittest.plugins.CodeCoveragePlugin|matlab.unittest.plugins.TestReportPlugin