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