testrunner

Создайте исполнитель тестов

Описание

пример

runner = testrunner создаёт исполнитель тестов по умолчанию, который аналогичен раннеру, который по умолчанию конфигурирует среда тестирования при вызове runtests функция.

The testrunner функция возвращает matlab.unittest.TestRunner объект. Можно вызвать методы для возвращенного объекта, чтобы запустить и работать с вашим тестовым набором и настроить выполняемые тесты. Для примера, чтобы запустить набор тестов, используйте run(runner,suite).

пример

runner = testrunner('minimal') создает минимальный питатель без установленных плагинов. Возвращенный исполнитель тестов является самым простым из возможных и не производит вывода текста. Используйте этот синтаксис, когда вы хотите иметь полный контроль над плагинами, которые нужно добавить в питатель.

пример

runner = testrunner('textoutput') создает питатель, настроенный для вывода текста. Полученный выход включает прогресс тестирования, а также диагностику в случае непройденных тестов.

Этот синтаксис создает раннеры, которые, как правило, запускают тесты быстрее, потому что среда тестирования не записывает диагностику по результатам теста, полученным недефолтным раннером. Для получения дополнительной информации см. «Программный доступ к диагностическому тесту».

Примеры

свернуть все

Запустите набор тестов с питателем по умолчанию и получите доступ к результатам.

Создайте функциональный тестовый sampleTest.m в текущей папке. Файл содержит два теста, которые проходят, и один тест, который намеренно прекращает работать.

function tests = sampleTest
tests = functiontests(localfunctions);
end

function testA(testCase)      % Test passes
verifyEqual(testCase,2+3,5)
end

function testB(testCase)      % Test fails
verifyGreaterThan(testCase,13,42)
end

function testC(testCase)      % Test passes
verifySubstring(testCase,'hello, world','llo')
end

Создайте тестовый набор из тестов в sampleTest.m. Затем создайте питатель по умолчанию и запустите тесты.

suite = testsuite('SampleTest');
runner = testrunner;
results = run(runner,suite);
Running sampleTest
.
================================================================================
Verification failed in sampleTest/testB.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyGreaterThan failed.
    --> The value must be greater than the minimum value.
    
    Actual Value:
        13
    Minimum Value (Exclusive):
        42
    ------------------
    Stack Information:
    ------------------
    In C:\TEMP\Examples\matlab-ex95386316\sampleTest.m (testB) at 10
================================================================================
..
Done sampleTest
__________

Failure Summary:

     Name              Failed  Incomplete  Reason(s)
    ===============================================================
     sampleTest/testB    X                 Failed by verification.

Отображение результатов второго теста.

results(2)
ans = 
  TestResult with properties:

          Name: 'sampleTest/testB'
        Passed: 0
        Failed: 1
    Incomplete: 0
      Duration: 0.2210
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed (rerun), 0 Incomplete.
   0.221 seconds testing time.

Когда вы запускаете тесты с раннером по умолчанию, среда тестирования использует DiagnosticsRecordingPlugin образец для записи диагностики по результатам тестирования. Доступ к записанной диагностике для второго теста с помощью DiagnosticRecord поле в Details свойство на TestResult объект.

records = results(2).Details.DiagnosticRecord
records = 
  QualificationDiagnosticRecord with properties:

                          Event: 'VerificationFailed'
                     EventScope: TestMethod
                  EventLocation: 'sampleTest/testB'
          TestDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
     FrameworkDiagnosticResults: [1×1 matlab.unittest.diagnostics.DiagnosticResult]
    AdditionalDiagnosticResults: [1×0 matlab.unittest.diagnostics.DiagnosticResult]
                          Stack: [1×1 struct]
                         Report: 'Verification failed in sampleTest/testB.↵    ---------------------↵    Framework Diagnostic:↵    ---------------------↵    verifyGreaterThan failed.↵    --> The value must be greater than the minimum value.↵    ↵    Actual Value:↵        13↵    Minimum Value (Exclusive):↵        42↵    ------------------↵    Stack Information:↵    ------------------↵    In C:\TEMP\Examples\matlab-ex95386316\sampleTest.m (testB) at 10'

Сгенерируйте результаты теста в стиле JUnit, создав минимальный питатель и затем добавив XMLPlugin образец в питатель.

Создайте функциональный тестовый sampleTest.m в текущей папке. Файл содержит два теста, которые проходят, и один тест, который намеренно прекращает работать.

function tests = sampleTest
tests = functiontests(localfunctions);
end

function testA(testCase)      % Test passes
verifyEqual(testCase,2+3,5)
end

function testB(testCase)      % Test fails
verifyGreaterThan(testCase,13,42)
end

function testC(testCase)      % Test passes
verifySubstring(testCase,'hello, world','llo')
end

Создайте тестовый набор из тестов в sampleTest.m.

suite = testsuite('sampleTest');

Создайте исполнителя тестов без плагинов. Этот код создает бесшумный питатель, который не выдает выхода. Теперь можно установить все плагины, которые вам нравятся.

runner = testrunner('minimal');

Создайте XMLPlugin образец, который записывает выход в формате JUnit в файл myTestResults.xml.

import matlab.unittest.plugins.XMLPlugin
xmlFile = 'myTestResults.xml';
p = XMLPlugin.producingJUnitFormat(xmlFile);

Добавьте плагин к исполнителю тестов и запустите тесты.

addPlugin(runner,p)
results = run(runner,suite);

Отображение результатов второго теста.

results(2)
ans = 
  TestResult with properties:

          Name: 'sampleTest/testB'
        Passed: 0
        Failed: 1
    Incomplete: 0
      Duration: 0.0723
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed (rerun), 0 Incomplete.
   0.0723 seconds testing time.

Проверьте наличие диагностики, зарегистрированной по результатам теста. Если бы вы использовали питатель по умолчанию, был бы DiagnosticRecord поле в этом месте. Но из-за того, что вы используете nondefault runner, среда не создает такое поле.

records = results(2).Details
records = struct with no fields.


Теперь посмотрим содержимое сгенерированного программного продукта.

disp(fileread(xmlFile))
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<testsuites>

  <testsuite errors="0" failures="1" name="sampleTest" skipped="0" tests="3" time="0.083731">
    <testcase classname="sampleTest" name="testA" time="0.0085045"/>
    <testcase classname="sampleTest" name="testB" time="0.0723">
      <failure type="VerificationFailure">Verification failed in sampleTest/testB.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyGreaterThan failed.
    --&gt; The value must be greater than the minimum value.
    
    Actual Value:
        13
    Minimum Value (Exclusive):
        42
    ------------------
    Stack Information:
    ------------------
    In C:\TEMP\Examples\matlab-ex97531283\sampleTest.m (testB) at 10</failure>
    </testcase>
    <testcase classname="sampleTest" name="testC" time="0.0029273"/>
  </testsuite>

</testsuites>

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

Создайте функциональный тестовый sampleTest.m в текущей папке. Файл содержит два теста, которые проходят, и один тест, который намеренно прекращает работать.

function tests = sampleTest
tests = functiontests(localfunctions);
end

function testA(testCase)      % Test passes
verifyEqual(testCase,2+3,5)
end

function testB(testCase)      % Test fails
verifyGreaterThan(testCase,13,42)
end

function testC(testCase)      % Test passes
verifySubstring(testCase,'hello, world','llo')
end

Создайте тестовый набор из тестов в sampleTest.m.

suite = testsuite('sampleTest');

Создайте питатель, который производит вывод текста и использует его для запуска тестов.

runner = testrunner('textoutput');
results = run(runner,suite);
Running sampleTest
.
================================================================================
Verification failed in sampleTest/testB.
    ---------------------
    Framework Diagnostic:
    ---------------------
    verifyGreaterThan failed.
    --> The value must be greater than the minimum value.
    
    Actual Value:
        13
    Minimum Value (Exclusive):
        42
    ------------------
    Stack Information:
    ------------------
    In C:\TEMP\Examples\matlab-ex48684143\sampleTest.m (testB) at 10
================================================================================
..
Done sampleTest
__________

Failure Summary:

     Name              Failed  Incomplete  Reason(s)
    ===============================================================
     sampleTest/testB    X                 Failed by verification.

Отображение результатов второго теста.

results(2)
ans = 
  TestResult with properties:

          Name: 'sampleTest/testB'
        Passed: 0
        Failed: 1
    Incomplete: 0
      Duration: 1.9894
       Details: [1×1 struct]

Totals:
   0 Passed, 1 Failed (rerun), 0 Incomplete.
   1.9894 seconds testing time.

Проверьте наличие диагностики, зарегистрированной по результатам теста. Если бы вы использовали питатель по умолчанию, был бы DiagnosticRecord поле в этом месте. Но из-за того, что вы используете nondefault runner, среда не создает такое поле.

records = results(2).Details
records = struct with no fields.


Совет

  • Питатель, созданный с помощью testrunner('minimal') является тем же самым, что и питатель, созданный с помощью matlab.unittest.TestRunner.withNoPlugins способ.

  • Питатель, созданный с помощью testrunner('textoutput') является тем же самым, что и питатель, созданный с помощью matlab.unittest.TestRunner.withTextOutput метод без входных параметров.

Введенный в R2021a