Программу 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
Для тестирования quadraticSolver , создайте тестовый файл quadraticSolverTest.m в текущей папке. Затем определите главную функцию и две локальные функции в файле для тестирования. quadraticSolver против реальных и мнимых решений. Название основной и локальной функций должно начинаться или заканчиваться словом «test», которое не учитывает регистр. Кроме того, имя основной функции должно соответствовать имени тестового файла.
Для выполнения модульных тестов на основе функций необходимо определить основную функцию, которая собирает все локальные тестовые функции в тестовый массив. Определение основной функции quadraticSolverTest в файле теста. Вызовы основных функций functiontests для создания тестового массива tests. Проход localfunctions кому functiontests для автоматического создания массива ячеек дескрипторов функций для локальных функций в файле.
function tests = quadraticSolverTest tests = functiontests(localfunctions); end
Добавьте локальные функции в тестовый файл для тестирования quadraticSolver функция против реальных и мнимых решений. Порядок тестов в файле не имеет значения. Каждая локальная функция должна принимать один вход testCase, который является matlab.unittest.FunctionTestCase объект. Структура тестирования автоматически генерирует этот объект. Функция использует объект для выполнения квалификаций для проверки значений и реагирования на сбои.
Определение локальной функции testRealSolution для проверки того, что quadraticSolver возвращает правильные действительные решения для конкретных коэффициентов. Например, уравнение = 0 имеет вещественные x = и x = 2. Вызов функцииquadraticSolver с коэффициентами этого уравнения. Затем он использует verifyEqual функция квалификации для сравнения фактических выходных данных actSolution к ожидаемому результату expSolution.
function tests = solverTest tests = functiontests(localfunctions); end function testRealSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2 1]; verifyEqual(testCase,actSolution,expSolution) end
Определение второй локальной функции testImaginarySolution для проверки того, что quadraticSolver возвращает правильные мнимые решения для определенных коэффициентов. Например, уравнение 10 = 0 имеет мнимые = -1 и x = -1-3i. Как и предыдущая функция, эта функция вызываетquadraticSolver с коэффициентами этого уравнения, а затем использует verifyEqual функция квалификации для сравнения фактических выходных данных actSolution к ожидаемому результату expSolution.
function tests = solverTest tests = functiontests(localfunctions); end function testRealSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2 1]; verifyEqual(testCase,actSolution,expSolution) end function testImaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i -1-3i]; verifyEqual(testCase,actSolution,expSolution) end
Используйте runtests для выполнения тестов, определенных в quadraticSolverTest.m файл. В этом примере оба теста проходят.
results = runtests('quadraticSolverTest.m')Running quadraticSolverTest .. Done quadraticSolverTest __________
results =
1×2 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
2 Passed, 0 Failed, 0 Incomplete.
0.89529 seconds testing time.
Можно также запустить тесты с помощью run функция.
results = run(quadraticSolverTest)
Running quadraticSolverTest .. Done quadraticSolverTest __________
results =
1×2 TestResult array with properties:
Name
Passed
Failed
Incomplete
Duration
Details
Totals:
2 Passed, 0 Failed, 0 Incomplete.
0.017825 seconds testing time.
functiontests | localfunctions | runtests