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

Можно протестировать программу 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.

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

Похожие темы