Плагин, чтобы сгенерировать пользовательский тестовый выходной формат

Этот пример показывает, как создать плагин, который использует пользовательский формат, чтобы записать завершенные результаты испытаний в поток вывода.

Создание плагина

В файле в вашей рабочей папке создайте класс, ExampleCustomPlugin, который наследовался классу matlab.unittest.plugins.TestRunnerPlugin. В сменном классе:

  • Задайте свойство Stream на плагине, который хранит экземпляр OutputStream. По умолчанию плагин пишет в стандартный вывод.

  • Замените метод runTestSuite по умолчанию TestRunnerPlugin к синтезируемому тексту, который указывает, что исполнитель тестов запускает новый сеанс тестирования. Эта информация особенно полезна, если вы пишете в один файл журнала, когда она позволяет вам дифференцировать тестовые прогоны.

  • Замените метод reportFinalizedResult по умолчанию TestRunnerPlugin, чтобы записать завершенные результаты испытаний в поток вывода. Можно изменить метод print, чтобы вывести результаты испытаний в формате, который работает на тестовые журналы или непрерывную систему интегрирования.

classdef ExampleCustomPlugin < matlab.unittest.plugins.TestRunnerPlugin
    properties (Access=private)
        Stream
    end
    
    methods
        function p = ExampleCustomPlugin(stream)
            if ~nargin
                stream = matlab.unittest.plugins.ToStandardOutput;
            end
            validateattributes(stream,...
                {'matlab.unittest.plugins.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 , содержащий следующий тестовый класс. В этом тестовом классе двух из тестовой передачи и другие приводят к отказу предположения или верификации.

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.unittest.plugins.ToFile
fname = 'YPS_test_results.txt';
p = ExampleCustomPlugin(ToFile(fname));

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

Просмотрите содержимое выходного файла.

type(fname)
--- NEW TEST SESSION at 26-Jan-2015 10:41:24 ---
### YPS Company - Test PASSED ### - ExampleTest/testOne in 0.123284 seconds.
### YPS Company - Test FAILED ### - ExampleTest/testTwo in 0.090363 seconds.
### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.518044 seconds.
### YPS Company - Test PASSED ### - ExampleTest/testFour in 0.020599 seconds.

Повторно выполните тесты Incomplete с помощью того же исполнителя тестов. Просмотрите содержимое выходного файла.

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

type(fname)
--- NEW TEST SESSION at 26-Jan-2015 10:41:24 ---
### YPS Company - Test PASSED ### - ExampleTest/testOne in 0.123284 seconds.
### YPS Company - Test FAILED ### - ExampleTest/testTwo in 0.090363 seconds.
### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.518044 seconds.
### YPS Company - Test PASSED ### - ExampleTest/testFour in 0.020599 seconds.

--- NEW TEST SESSION at 26-Jan-2015 10:41:58 ---
### YPS Company - Test SKIPPED ### - ExampleTest/testThree in 0.007892 seconds.

Смотрите также

| | |

Похожие темы