Можно протестировать программу 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 путем подкласса matlab.unittest.TestCase класс. Этот класс предоставляет место для тестов для quadraticSolver функция. Добавить три модульных теста внутри methods блок с Test атрибут. Эти тесты quadraticSolver функция против реальных решений, мнимых решений и условий ошибок. Каждый Test метод должен принимать TestCase экземпляр в качестве входных данных. Порядок проведения тестов внутри блока не имеет значения.
Сначала создайте Test метод realSolution для проверки того, что quadraticSolver возвращает правильные действительные решения для конкретных коэффициентов. Например, уравнение = 0 имеет вещественные x = и 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 возвращает правильные мнимые решения для определенных коэффициентов. Например, уравнение 10 = 0 имеет мнимые = -1 и 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 класс, создайте 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.