사용자 지정 테스트 출력 형식을 생성하는 플러그인
R2026b이 예제에서는 사용자 지정 형식을 사용하여 최종 테스트 결과를 출력 스트림에 작성하는 플러그인을 생성하는 방법을 보여줍니다.
플러그인 생성하기
작업 폴더의 파일 내에 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.
참고 항목
matlab.unittest.plugins.TestRunnerPlugin | matlab.automation.streams.OutputStream | matlab.automation.streams.ToFile | matlab.automation.streams.ToStandardOutput