Запись простого теста Используя классы

Этот пример показывает, как записать модульный тест на функцию MATLAB®, quadraticSolver.m.

Создание Функции quadraticSolver.m

Следующая функция MATLAB решает квадратные уравнения. Создайте эту функцию в папке на вашем пути MATLAB.

function roots = quadraticSolver(a, b, c)
% quadraticSolver returns solutions to the 
% quadratic equation a*x^2 + b*x + c = 0.

if ~isa(a,'numeric') || ~isa(b,'numeric') || ~isa(c,'numeric')
    error('quadraticSolver:InputMustBeNumeric', ...
        'Coefficients must be numeric.');
end

roots(1) = (-b + sqrt(b^2 - 4*a*c)) / (2*a);
roots(2) = (-b - sqrt(b^2 - 4*a*c)) / (2*a);

end

Создание определения класса SolverTest

Чтобы использовать среду matlab.unittest, запишите функции MATLAB (тесты) в форме теста, класс, выведенный от matlab.unittest.TestCase.

Создайте подкласс, SolverTest.


% Copyright 2015 The MathWorks, Inc.

classdef SolverTest < matlab.unittest.TestCase

    methods (Test)

    end

end

Следующие шаги показывают, как создать определенные тесты. Поместите эти тесты в блоке methods с атрибутом (Test).

Создание метода тестирования для действительных решений

Создайте метод тестирования, testRealSolution, чтобы проверить, что quadraticSolver возвращает правильное значение для действительных решений. Например, уравнение имеет действительные решения и. Этот вызовы метода quadraticSolver с входными параметрами этого уравнения. Решением, expSolution, является [2,1].

Используйте метод matlab.unittest.TestCase, verifyEqual, чтобы сравнить вывод функции, actSolution, к желаемому выводу, expSolution. Если проверка перестала работать, тест продолжает выполнение.


% Copyright 2015 The MathWorks, Inc.

function testRealSolution(testCase)
    actSolution = quadraticSolver(1,-3,2);
    expSolution = [2,1];
    testCase.verifyEqual(actSolution,expSolution)
end 

Добавьте эту функцию в блоке methods (Test).

Создание метода тестирования для мнимых решений

Создайте тест, чтобы проверить, что quadraticSolver возвращает правильное значение для мнимых решений. Например, уравнение имеет мнимые решения и. Добавьте эту функцию, testImaginarySolution, в блоке methods (Test).


% Copyright 2015 The MathWorks, Inc.

function testImaginarySolution(testCase)
    actSolution = quadraticSolver(1,2,10);
    expSolution = [-1+3i, -1-3i];
    testCase.verifyEqual(actSolution,expSolution)
end

Порядок тестов в блоке не имеет значения.

Сохранение определения класса

Следующее является полным определением класса SolverTest. Сохраните этот файл в папке на своем пути MATLAB.

classdef SolverTest < matlab.unittest.TestCase
    % SolverTest tests solutions to the quadratic equation
    % a*x^2 + b*x + c = 0
    
    methods (Test)
        function testRealSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2,1];
            testCase.verifyEqual(actSolution,expSolution);
        end
        function testImaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i, -1-3i];
            testCase.verifyEqual(actSolution,expSolution);
        end
    end
    
end 

Запущение тестов в тесте SolverTest

Запустите все тесты в файле определения класса SolverTest.

testCase = SolverTest;
res = run(testCase)
Running SolverTest
..
Done SolverTest
__________


res = 

  1x2 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   2 Passed, 0 Failed, 0 Incomplete.
   0.43185 seconds testing time.

Выполнение единственного метода тестирования

Запускать один тест, testRealSolution:

testCase = SolverTest;
res = run(testCase,'testRealSolution')
Running SolverTest
.
Done SolverTest
__________


res = 

  TestResult with properties:

          Name: 'SolverTest/testRealSolution'
        Passed: 1
        Failed: 0
    Incomplete: 0
      Duration: 0.0103
       Details: [1x1 struct]

Totals:
   1 Passed, 0 Failed, 0 Incomplete.
   0.010346 seconds testing time.

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте