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

В этом примере показано, как записать, что модульные тесты на MATLAB® функционируют quadraticSolver.

Создание квадратичной функции решателя

В файле в вашей текущей папке создайте функциональный quadraticSolver, который возвращает корни квадратичных полиномов.

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

Протестировать quadraticSolver функционируйте, создайте тестовый класс путем разделения на подклассы matlab.unittest.TestCase класс. Добавьте свои тесты в methods блокируйтесь с Test атрибут. Порядок тестов в блоке не имеет значения.

classdef SolverTest < matlab.unittest.TestCase

    methods (Test)

    end

end

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

Создайте метод тестирования testRealSolution проверять тот quadraticSolver возвращает правильные решения. Например, уравнение x2-3x+2=0 имеет действительные решения x=1 и x=2. Вызовы метода quadraticSolver с коэффициентами этого уравнения. Затем это использует verifyEqual метод matlab.unittest.TestCase сравнить выход функции, actSolution, к желаемому выходу, expSolution. Если проверка перестала работать, выполнение теста продолжается.

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

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

Создайте метод тестирования testImaginarySolution проверять тот quadraticSolver возвращает правильные мнимые решения. Например, уравнение x2-2x+10=0 имеет мнимые решения x=-1+3i и x=-1-3i.

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

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

Создайте метод тестирования testNonNumericInput проверять тот quadraticSolver производит ошибку для нечисловых коэффициентов. Используйте verifyError метод matlab.unittest.TestCase чтобы протестировать это, функция выдает исключение, заданное ошибочным идентификатором 'quadraticSolver:InputMustBeNumeric'.

function testNonNumericInput(testCase)
    testCase.verifyError(@()quadraticSolver(1,'-3',2), ...
        'quadraticSolver:InputMustBeNumeric')
end

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

Этот код предоставляет полное содержимое SolverTest класс.

classdef SolverTest < matlab.unittest.TestCase
    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
        function testNonNumericInput(testCase)
            testCase.verifyError(@()quadraticSolver(1,'-3',2), ...
                'quadraticSolver:InputMustBeNumeric')
        end
    end
end

Запустите тесты в классе SolverTest

Запустите все тесты в SolverTest класс.

testCase = SolverTest;
res = run(testCase)
Running SolverTest
...
Done SolverTest
__________
res = 
  1×3 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   3 Passed, 0 Failed, 0 Incomplete.
   1.4335 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.0142
       Details: [1×1 struct]

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

Похожие темы