Main Content

MATLAB 단위 테스트 플러그인을 사용하여 아티팩트 생성하기

MATLAB® 단위 테스트 프레임워크를 사용하면 matlab.unittest.plugins 네임스페이스에 있는 플러그인 클래스를 사용하여 테스트 실행기를 사용자 지정할 수 있습니다. 다음과 같은 플러그인 클래스를 사용하여 지속적 통합(CI) 플랫폼과 호환되는 아티팩트 및 테스트 리포트를 생성할 수 있습니다.

Simulink® Test™ 테스트 케이스를 실행할 때 CI 호환 아티팩트를 생성할 수도 있습니다. 자세한 내용은 Output Results for Continuous Integration Systems (Simulink Test) 항목을 참조하십시오.

사용자 지정 테스트 실행기(Test Runner)를 사용하여 테스트 실행하기

이 예제에서는 테스트 스위트를 만들고 테스트 실행기를 사용자 지정하여 테스트 실행 진행률을 보고하고 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)

파일 junittestresults.xml에 JUnit 스타일의 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.

현재 폴더의 파일을 나열합니다. 세 개의 지정된 아티팩트는 현재 폴더에 저장됩니다.

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


생성된 아티팩트를 CI 플랫폼에서 처리할 수 있습니다. 생성된 아티팩트의 내용을 볼 수도 있습니다. 예를 들어, PDF 테스트 리포트를 열어 봅니다.

open("testreport.pdf")

참고 항목

클래스

네임스페이스

관련 항목