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