Main Content

사용자 지정 테스트 출력 형식을 생성하는 플러그인

이 예제에서는 사용자 지정 형식을 사용하여 최종 테스트 결과를 출력 스트림에 작성하는 플러그인을 생성하는 방법을 보여줍니다.

플러그인 생성하기

작업 폴더의 파일 내에 matlab.unittest.plugins.TestRunnerPlugin 클래스로부터 상속하는 클래스 ExampleCustomPlugin을 생성합니다. 이 플러그인 클래스에서 다음을 수행할 수 있습니다.

  • OutputStream 인스턴스를 저장하는 플러그인의 Stream 속성을 정의합니다. 기본적으로 플러그인은 표준 출력에 작성합니다.

  • TestRunnerPlugin의 디폴트 runTestSuite 메서드를 재정의하여 테스트 실행기가 새 테스트 세션을 실행하고 있음을 나타내는 텍스트를 출력합니다. 이 정보를 통해 각 테스트 실행 건을 구별할 수 있으므로 단일 로그 파일에 작성하는 경우 이 정보가 특히 유용합니다.

  • TestRunnerPlugin의 디폴트 reportFinalizedResult 메서드를 재정의하여 최종 테스트 결과를 출력 스트림에 작성합니다. print 메서드를 수정하여 사용자의 테스트 로그나 지속적 통합(Continuous Integration) 시스템에 알맞은 형식으로 테스트 결과를 출력할 수 있습니다.

classdef ExampleCustomPlugin < matlab.unittest.plugins.TestRunnerPlugin
    properties (Access=private)
        Stream
    end
    
    methods
        function p = ExampleCustomPlugin(stream)
            if ~nargin
                stream = matlab.automation.streams.ToStandardOutput;
            end
            validateattributes(stream, ...
                {'matlab.automation.streams.OutputStream'},{})
            p.Stream = stream;
        end
    end
    
    methods (Access=protected)
        function runTestSuite(plugin,pluginData)
            plugin.Stream.print('\n--- NEW TEST SESSION at %s ---\n',...
                char(datetime))
            runTestSuite@...
                matlab.unittest.plugins.TestRunnerPlugin(plugin,pluginData);
        end
        
        function reportFinalizedResult(plugin,pluginData)
            thisResult = pluginData.TestResult;
            if thisResult.Passed
                status = 'PASSED';
            elseif thisResult.Failed
                status = 'FAILED';
            elseif thisResult.Incomplete
                status = 'SKIPPED';
            end
            plugin.Stream.print(...
                '### YPS Company - Test %s ### - %s in %f seconds.\n',...
                status,thisResult.Name,thisResult.Duration)
            
            reportFinalizedResult@...
                matlab.unittest.plugins.TestRunnerPlugin(plugin,pluginData)
        end
    end
end

테스트 클래스 생성하기

작업 폴더에서 다음 테스트 클래스가 포함된 파일 ExampleTest.m을 만드십시오. 이 테스트 클래스에서는 두 개의 테스트가 통과되며 나머지는 검증(Verification), 혹은 가정(Assumption)에 실패합니다.

classdef ExampleTest < matlab.unittest.TestCase
    methods(Test)
        function testOne(testCase)
            testCase.assertGreaterThan(5,1)
        end
        function testTwo(testCase)
            wrongAnswer = 'wrong';
            testCase.verifyEmpty(wrongAnswer,'Not Empty')
            testCase.verifyClass(wrongAnswer,'double','Not double')
        end
        function testThree(testCase)
            testCase.assumeEqual(7*2,13,'Values not equal')
        end
        function testFour(testCase)
            testCase.verifyEqual(3+2,5)
        end
    end
end

테스트 실행기에 플러그인 추가하고 테스트 실행하기

명령 프롬프트에서, ExampleTest 클래스로부터 테스트 스위트를 만들고 테스트 실행기를 만드십시오.

import matlab.unittest.TestSuite
import matlab.unittest.TestRunner

suite = TestSuite.fromClass(?ExampleTest);
runner = TestRunner.withNoPlugins;

ExampleCustomPlugin의 인스턴스를 만들고 이를 테스트 실행기에 추가하십시오. 테스트를 실행하십시오.

import matlab.automation.streams.ToFile
fname = 'YPS_test_results.txt';
p = ExampleCustomPlugin(ToFile(fname));

runner.addPlugin(p)
result = runner.run(suite);

출력 파일의 내용을 확인합니다.

type(fname)
--- NEW TEST SESSION at 15-Oct-2022 20:30:15 ---
### YPS Company - Test PASSED ### - ExampleTest/testOne in 0.014881 seconds.
### YPS Company - Test FAILED ### - ExampleTest/testTwo in 0.099099 seconds.
### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.073080 seconds.
### YPS Company - Test PASSED ### - ExampleTest/testFour in 0.006351 seconds.

동일한 테스트 실행기를 사용하여 Incomplete 테스트를 다시 실행하십시오. 출력 파일의 내용을 확인합니다.

suiteFiltered = suite([result.Incomplete]);
result2 = runner.run(suiteFiltered);

type(fname)
--- NEW TEST SESSION at 15-Oct-2022 20:30:15 ---
### YPS Company - Test PASSED ### - ExampleTest/testOne in 0.014881 seconds.
### YPS Company - Test FAILED ### - ExampleTest/testTwo in 0.099099 seconds.
### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.073080 seconds.
### YPS Company - Test PASSED ### - ExampleTest/testFour in 0.006351 seconds.

--- NEW TEST SESSION at 15-Oct-2022 20:31:00 ---
### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.018080 seconds.

참고 항목

| | |

관련 항목