このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
matlab.unittest.plugins.CodeCoveragePlugin クラス
名前空間: matlab.unittest.plugins
コード カバレッジ情報へのアクセスを提供するプラグイン
説明
MATLAB® ソース コードのコード カバレッジ情報を収集してアクセスするには、matlab.unittest.plugins.CodeCoveragePlugin
クラスのインスタンスをテスト ランナーに追加します。テスト スイートが実行されると、プラグインにより、テストによって実行されたソース コードの部分を示す情報が収集されます。この情報には、プログラムまたはコード カバレッジ レポートからアクセスできます。
matlab.unittest.plugins.CodeCoveragePlugin
クラスは handle
クラスです。
作成
CodeCoveragePlugin
の静的メソッドのいずれかを使用してそのインスタンスを作成します。
ファイル内のソース コードのコード カバレッジ情報へのアクセスを提供するプラグインを作成するには、静的メソッド
forFile
を使用します。フォルダー内のソース コードのコード カバレッジ情報へのアクセスを提供するプラグインを作成するには、静的メソッド
forFolder
を使用します。名前空間内のソース コードのコード カバレッジ情報へのアクセスを提供するプラグインを作成するには、静的メソッド
forNamespace
を使用します。
プロパティ
MetricLevel
— 収集するカバレッジ メトリクスのレベル
"statement"
(既定値) | "decision"
| "condition"
| "mcdc"
収集するカバレッジ メトリクスのレベル。次の表のいずれかの値として返されます。既定では、プラグインはステートメントと関数のカバレッジ メトリクスを収集します。
MetricLevel の値 | 含まれるカバレッジのタイプ |
---|---|
"statement" | ステートメント カバレッジ、関数カバレッジ |
| ステートメント カバレッジ、関数カバレッジ、判定カバレッジ |
| ステートメント カバレッジ、関数カバレッジ、判定カバレッジ、条件カバレッジ |
| ステートメント カバレッジ、関数カバレッジ、判定カバレッジ、条件カバレッジ、改良条件判定カバレッジ (MC/DC) |
このプロパティを設定するには、CodeCoveragePlugin
クラスのいずれかの静的メソッドを使用してプラグインを作成するときに名前と値の引数 MetricLevel
を指定します。カバレッジのタイプの詳細については、Types of Code Coverage for MATLAB Source Code (MATLAB Test)を参照してください。
属性:
GetAccess | public |
SetAccess | immutable |
メソッド
パブリック メソッド
matlab.unittest.plugins.CodeCoveragePlugin.forFile | ファイルのコード カバレッジ情報を収集するプラグインを作成 |
matlab.unittest.plugins.CodeCoveragePlugin.forFolder | フォルダーのコード カバレッジ情報を収集するプラグインを作成 |
matlab.unittest.plugins.CodeCoveragePlugin.forNamespace | Create plugin that collects code coverage information for namespaces |
例
対話型コード カバレッジ レポートの生成
ソース コードに対してテスト スイートを実行して HTML 形式の対話型コード カバレッジ レポートを生成します。
現在のフォルダー内の sourceFolder
という名前のフォルダーに、関数 quadraticSolver
を作成します。この関数は入力として 2 次多項式の係数をとり、多項式の根を返します。係数を非数値として指定した場合、関数はエラーをスローします。
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
をテストするには、現在のフォルダー内の testsFolder
という名前のフォルダーに SolverTest
クラスを作成します。実数解、虚数解、非数値入力について関数をテストする 3 つの Test
メソッドを定義します。
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
テストを実行してコード カバレッジ レポートを生成するには、まず sourceFolder
をパスに追加します。
addpath("sourceFolder")
testsFolder
からテスト スイートを作成します。
suite = testsuite("testsFolder");
テスト ランナーを作成し、sourceFolder
内のコードの対話型コード カバレッジ レポートを生成するプラグインを使用してテスト ランナーをカスタマイズします。プラグインの出力を現在のフォルダー内の coverageReport
という名前のフォルダーに書き込むように指定します。
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoverageReport runner = testrunner("textoutput"); reportFormat = CoverageReport("coverageReport"); p = CodeCoveragePlugin.forFolder("sourceFolder","Producing",reportFormat); runner.addPlugin(p)
テストを実行します。この例では、すべてのテストがパスし、ソース コードはフル カバレッジの評価を受けます。プラグインにより、現在のフォルダー内の指定フォルダー coverageReport
に対話型コード カバレッジ レポートが生成されます。既定では、レポートのメイン ファイルは index.html
です。
results = runner.run(suite);
Running SolverTest ... Done SolverTest __________ MATLAB code coverage report has been saved to: C:\work\coverageReport\index.html
レポートのメイン ファイルを開きます。
open(fullfile("coverageReport","index.html"))
Cobertura XML 形式でのコード カバレッジ レポートの生成
ソース コードに対してテスト スイートを実行して Cobertura XML 形式のコード カバレッジ レポートを生成します。
現在のフォルダー内のファイルに、関数 quadraticSolver
を作成します。この関数は入力として 2 次多項式の係数をとり、多項式の根を返します。係数を非数値として指定した場合、関数はエラーをスローします。
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
クラスを作成します。実数解、虚数解、非数値入力について関数をテストする 3 つの Test
メソッドを定義します。
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");
テスト ランナーを作成し、ファイル quadraticSolver.m
内のソース コードの Cobertura XML コード カバレッジ レポートを生成するプラグインを使用してテスト ランナーをカスタマイズします。プラグインが現在のフォルダー内の coverageReport.xml
という名前のファイルに出力を書き込むように指定します。
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoberturaFormat runner = testrunner("textoutput"); sourceCodeFile = "quadraticSolver.m"; reportFile = "coverageReport.xml"; reportFormat = CoberturaFormat(reportFile); p = CodeCoveragePlugin.forFile(sourceCodeFile,"Producing",reportFormat); runner.addPlugin(p)
テストを実行します。この例では、すべてのテストがパスし、ソース コードはフル カバレッジの評価を受けます。プラグインにより、現在のフォルダーに Cobertura XML コード カバレッジ レポートが生成されます。
results = runner.run(suite);
Running SolverTest ... Done SolverTest __________
継続的インテグレーション (CI) プラットフォームで生成されたコード カバレッジ レポートを処理できます。また、open(reportFile)
や disp(fileread(reportFile))
などのコマンドを使用してコンテンツを表示することもできます。
ステートメント カバレッジに関する情報へのアクセス
テスト スイートを実行してコード カバレッジの結果を収集します。その後、結果からステートメント カバレッジに関する情報を取得します。
現在のフォルダー内の quadraticSolver.m
という名前のファイルで、関数 quadraticSolver
を作成します。この関数は入力として 2 次多項式の係数をとり、多項式の根を返します。係数を非数値として指定した場合、関数はエラーをスローします。
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.m
という名前のファイルで SolverTest
クラスを作成します。実数解、虚数解、非数値入力について関数をテストする 3 つの Test
メソッドを定義します。
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
この例で使用するクラスをインポートします。
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoverageResult
SolverTest
クラスからテスト スイートを作成します。
suite = testsuite("SolverTest");
テスト ランナーを作成し、ファイル quadraticSolver.m
内のソース コードのコード カバレッジ情報へのプログラムによるアクセスを提供するプラグインを使用してカスタマイズします。
runner = testrunner("textoutput"); format = CoverageResult; p = CodeCoveragePlugin.forFile("quadraticSolver.m",Producing=format); runner.addPlugin(p)
テストを実行します。テストの実行後、format
の Result
プロパティにカバレッジの結果が格納されます。この例では、すべてのテストがパスします。
runner.run(suite);
Running SolverTest ... Done SolverTest __________
ステートメント カバレッジの概要にアクセスします。返されるベクトルは、テストでソース コード内の 4 つのステートメントがすべて実行されたことを示しています。
result = format.Result;
summary = coverageSummary(result,"statement")
summary = 1×2
4 4
コード カバレッジ解析の説明を使用して、各ステートメントの実行回数を取得します。
[~,description] = coverageSummary(result,"statement")
description = struct with fields:
statement: [1×4 struct]
disp([description.statement.ExecutionCount])
3 1 2 2
2 つのプラグインを使用したコード カバレッジ レポートの生成
コード カバレッジ情報を収集するために、単一のテスト ランナーに複数のプラグインを追加できます。たとえば、現在のフォルダー内の MATLAB コードについてのカバレッジの結果を収集するプラグインを追加し、さらに現在のフォルダー内の C/C++ 生成コードについての結果を収集する別のプラグインを追加できます。テスト ランナーをこのようにカスタマイズした場合、各プラグインで個別に解析を実行するように、プラグインごとにカバレッジの形式をそれぞれ指定する必要があります。
この例では、2 つのプラグインをテスト ランナーに追加し、各プラグインで異なるファイルのコード カバレッジ情報を収集する方法を示します。テストの実行後、2 つのカバレッジの結果を組み合わせてコード カバレッジ レポートを生成します。この例を開いて、必要なテスト ファイルとソース ファイルにアクセスします。例を開くと、BankAccountTest.m
ファイルと DocPolynomTest.m
ファイルで定義されたテストが現在のフォルダーに格納されます。さらに、テストに必要なソース ファイルも現在のフォルダーに格納されます。
openExample("matlab/GenerateCodeCoverageReportUsingPluginsExample")
BankAccountTest
クラスの定義
次のコードは、BankAccount
クラスのテストを定義する BankAccountTest
クラス定義ファイルの内容を示しています。BankAccount
クラスの詳細とクラス コードの表示方法については、連携するクラスの開発を参照してください。
classdef BankAccountTest < matlab.unittest.TestCase methods (Test) function testConstructor(testCase) b = BankAccount(1234,100); testCase.verifyEqual(b.AccountNumber,1234, ... "Constructor must correctly set account number.") testCase.verifyEqual(b.AccountBalance,100, ... "Constructor must correctly set account balance.") end function testConstructorNotEnoughInputs(testCase) import matlab.unittest.constraints.Throws testCase.verifyThat(@()BankAccount,Throws("MATLAB:minrhs")) end function testDeposit(testCase) b = BankAccount(1234,100); b.deposit(25) testCase.verifyEqual(b.AccountBalance,125) end function testWithdraw(testCase) b = BankAccount(1234,100); b.withdraw(25) testCase.verifyEqual(b.AccountBalance,75) end function testNotifyInsufficientFunds(testCase) callbackExecuted = false; function testCallback(~,~) callbackExecuted = true; end b = BankAccount(1234,100); b.addlistener("InsufficientFunds",@testCallback); b.withdraw(50) testCase.assertFalse(callbackExecuted, ... "The callback should not have executed yet.") b.withdraw(60) testCase.verifyTrue(callbackExecuted, ... "The listener callback should have fired.") end end end
DocPolynomTest
クラスの定義
次のコードは、DocPolynom
クラスのテストを定義する DocPolynomTest
クラス定義ファイルの内容を示しています。DocPolynom
クラスの詳細とクラス コードの表示方法については、クラスによる多項式の表現を参照してください。
classdef DocPolynomTest < matlab.unittest.TestCase properties TextToDisplay = "Equation under test: " end methods (Test) function testConstructor(testCase) p = DocPolynom([1 0 1]); testCase.verifyClass(p,?DocPolynom) end function testAddition(testCase) p1 = DocPolynom([1 0 1]); p2 = DocPolynom([5 2]); actual = p1 + p2; expected = DocPolynom([1 5 3]); diagnostic = [testCase.TextToDisplay ... "(x^2 + 1) + (5*x + 2) = x^2 + 5*x + 3"]; testCase.verifyEqual(actual,expected,diagnostic) end function testMultiplication(testCase) p1 = DocPolynom([1 0 3]); p2 = DocPolynom([5 2]); actual = p1 * p2; expected = DocPolynom([5 2 15 6]); diagnostic = [testCase.TextToDisplay ... "(x^2 + 3) * (5*x + 2) = 5*x^3 + 2*x^2 + 15*x + 6"]; testCase.verifyEqual(actual,expected,diagnostic) end end end
テストの実行とコード カバレッジ レポートの生成
この例で使用するクラスをインポートします。
import matlab.unittest.plugins.CodeCoveragePlugin import matlab.unittest.plugins.codecoverage.CoverageResult
テキスト出力用に構成されたテスト ランナーを作成します。
runner = testrunner("textoutput");
ファイル BankAccount.m
内のソース コードのコード カバレッジ情報へのプログラムによるアクセスを提供するプラグインをテスト ランナーに追加します。
format1 = CoverageResult;
plugin1 = CodeCoveragePlugin.forFile("BankAccount.m",Producing=format1);
runner.addPlugin(plugin1)
ファイル DocPolynom.m
内のソース コードのコード カバレッジ情報へのプログラムによるアクセスを提供する別のプラグインをテスト ランナーに追加します。
format2 = CoverageResult;
plugin2 = CodeCoveragePlugin.forFile("DocPolynom.m",Producing=format2);
runner.addPlugin(plugin2)
テスト クラス BankAccountTest
と DocPolynomTest
からテスト スイートを作成し、テストを実行します。この例では、すべてのテストがパスします。
suite = testsuite(["BankAccountTest" "DocPolynomTest"]); runner.run(suite);
Running BankAccountTest ..... Done BankAccountTest __________ Running DocPolynomTest ... Done DocPolynomTest __________
テストの実行後、形式オブジェクトの Result
プロパティに、対応するプラグインで収集されたカバレッジの結果が格納されます。テスト実行全体のカバレッジの集計をレポートするには、カバレッジの結果の結合から対話型コード カバレッジ レポートを生成します。
result1 = format1.Result; result2 = format2.Result; generateHTMLReport(result1 + result2)
詳細
MATLAB ソース コード
CodeCoveragePlugin
クラスのいずれかの静的メソッドを使用してプラグインを作成した場合、プラグインにより、拡張子が .m
、.mlx
、または .mlapp
のファイル内のソース コードのコード カバレッジ情報が収集されます。
バージョン履歴
R2014b で導入R2024a: 名前空間のカバレッジの収集に使用する静的メソッドの名前が forPackage
から forNamespace
に変更
matlab.unittest.plugins.CodeCoveragePlugin.forPackage
メソッドの名前が matlab.unittest.plugins.CodeCoveragePlugin.forNamespace
に変更されました。このメソッドの動作は同じままで、コード内の既存の matlab.unittest.plugins.CodeCoveragePlugin.forPackage
のインスタンスは引き続き想定どおりに機能します。matlab.unittest.plugins.CodeCoveragePlugin.forPackage
への既存の参照のサポートを削除する予定はありません。
R2023a: コード カバレッジの結果へのプログラムによるアクセス
ソース コードのコード カバレッジ解析の結果にプログラムでアクセスするには、CoverageResult
オブジェクトを使用して CodeCoveragePlugin
インスタンスを作成します。
R2023a: 収集するカバレッジ メトリクスの指定
コード カバレッジ解析の実行時に収集するカバレッジ メトリクスの指定をサポートするために、matlab.unittest.plugins.CodeCoveragePlugin
クラスに MetricLevel
という名前の新しいプロパティが追加されています。
R2022a: テスト ランナーへの複数の CodeCoveragePlugin
インスタンスの追加
テスト ランナーに複数の CodeCoveragePlugin
インスタンスを追加できます。テスト ランナーをこのようにカスタマイズした場合、各プラグインで異なるファイル セットについてレポートする必要があります。たとえば、テストを実行し、現在のフォルダーにある 2 つのフォルダー内のソース コードの対話型コード カバレッジ レポートを同時に生成します。
suite = testsuite(pwd); runner = testrunner("textoutput"); import matlab.unittest.plugins.CodeCoveragePlugin p1 = CodeCoveragePlugin.forFolder(folderA); runner.addPlugin(p1) p2 = CodeCoveragePlugin.forFolder(folderB); runner.addPlugin(p2) results = runner.run(suite);
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)