exponenta event banner

Запись простого теста с использованием классов

Можно протестировать программу MATLAB ®, определив единичные тесты в классе теста, который наследует от matlab.unittest.TestCase класс. Единичный тест в тесте на основе класса - это метод, который определяет правильность единицы программного обеспечения. Он определяется в пределах methods блок с Test и может использовать квалификации для тестирования значений и реагирования на сбои. Дополнительные сведения о тестах на основе классов см. в разделе Тесты на основе классов авторов в MATLAB.

В этом примере показано, как записать модульные тесты на основе классов для определения правильности функции, определенной в файле в текущей папке. 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

В файле в текущей папке создайте SolverTest путем подкласса matlab.unittest.TestCase класс. Этот класс предоставляет место для тестов для quadraticSolver функция. Добавить три модульных теста внутри methods блок с Test атрибут. Эти тесты quadraticSolver функция против реальных решений, мнимых решений и условий ошибок. Каждый Test метод должен принимать TestCase экземпляр в качестве входных данных. Порядок проведения тестов внутри блока не имеет значения.

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

classdef SolverTest < matlab.unittest.TestCase
    methods(Test)
        function realSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2 1];
            testCase.verifyEqual(actSolution,expSolution)
        end
    end
end

Создать секунду Test метод imaginarySolution для проверки того, что quadraticSolver возвращает правильные мнимые решения для определенных коэффициентов. Например, уравнение x2 + 2x + 10 = 0 имеет мнимые решения x = -1 + 3i и x = -1-3i. Как и предыдущий метод, этот метод вызываетquadraticSolver с коэффициентами этого уравнения, а затем использует verifyEqual метод сравнения фактических выходных данных actSolution к ожидаемому результату expSolution.

classdef SolverTest < matlab.unittest.TestCase
    methods(Test)
        function realSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2 1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function imaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
    end
end

Наконец, добавьте Test метод nonnumericInput для проверки того, что quadraticSolver создает ошибку для нечисловых коэффициентов. Используйте verifyError способ matlab.unittest.TestCase для проверки того, что функция выдает ошибку, указанную в 'quadraticSolver:InputMustBeNumeric' при вызове с входами 1, '-3', и 2.

classdef SolverTest < matlab.unittest.TestCase
    methods(Test)
        function realSolution(testCase)
            actSolution = quadraticSolver(1,-3,2);
            expSolution = [2 1];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function imaginarySolution(testCase)
            actSolution = quadraticSolver(1,2,10);
            expSolution = [-1+3i -1-3i];
            testCase.verifyEqual(actSolution,expSolution)
        end
        function nonnumericInput(testCase)
            testCase.verifyError(@()quadraticSolver(1,'-3',2), ...
                'quadraticSolver:InputMustBeNumeric')
        end
    end
end

Запуск тестов в классе SolverTest

Для выполнения всех тестов в SolverTest класс, создайте TestCase объект из класса, а затем вызовите run метод на объекте. В этом примере все три теста проходят.

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

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   3 Passed, 0 Failed, 0 Incomplete.
   1.2373 seconds testing time.

Вы также можете запустить один тест, указанный одним из Test методы. Выполнение определенного Test метод, передайте имя метода в run. Например, выполните команду realSolution способ.

result = run(testCase,'realSolution')
Running SolverTest
.
Done SolverTest
__________
result = 
  TestResult with properties:

          Name: 'SolverTest/realSolution'
        Passed: 1
        Failed: 0
    Incomplete: 0
      Duration: 0.0082
       Details: [1×1 struct]

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

См. также

Связанные темы