Этот пример показывает, как записать модульный тест на функцию MATLAB®, quadraticSolver.m
.
Следующая функция MATLAB решает квадратные уравнения. Создайте эту функцию в папке на вашем пути MATLAB.
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
Чтобы использовать среду matlab.unittest
, запишите функции MATLAB (тесты) в форме теста, класс, выведенный от matlab.unittest.TestCase
.
Создайте подкласс, SolverTest
.
% Copyright 2015 The MathWorks, Inc. classdef SolverTest < matlab.unittest.TestCase methods (Test) end end
Следующие шаги показывают, как создать определенные тесты. Поместите эти тесты в блоке methods
с атрибутом (Test)
.
Создайте метод тестирования, testRealSolution
, чтобы проверить, что quadraticSolver
возвращает правильное значение для действительных решений. Например, уравнение имеет действительные решения и. Этот вызовы метода quadraticSolver
с входными параметрами этого уравнения. Решением, expSolution
, является [2,1]
.
Используйте метод matlab.unittest.TestCase
, verifyEqual
, чтобы сравнить вывод функции, actSolution
, к желаемому выводу, expSolution
. Если проверка перестала работать, тест продолжает выполнение.
% Copyright 2015 The MathWorks, Inc. function testRealSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2,1]; testCase.verifyEqual(actSolution,expSolution) end
Добавьте эту функцию в блоке methods (Test)
.
Создайте тест, чтобы проверить, что quadraticSolver
возвращает правильное значение для мнимых решений. Например, уравнение имеет мнимые решения и. Добавьте эту функцию, testImaginarySolution
, в блоке methods (Test)
.
% Copyright 2015 The MathWorks, Inc. function testImaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i, -1-3i]; testCase.verifyEqual(actSolution,expSolution) end
Порядок тестов в блоке не имеет значения.
Следующее является полным определением класса SolverTest
. Сохраните этот файл в папке на своем пути MATLAB.
classdef SolverTest < matlab.unittest.TestCase % SolverTest tests solutions to the quadratic equation % a*x^2 + b*x + c = 0 methods (Test) function testRealSolution(testCase) actSolution = quadraticSolver(1,-3,2); expSolution = [2,1]; testCase.verifyEqual(actSolution,expSolution); end function testImaginarySolution(testCase) actSolution = quadraticSolver(1,2,10); expSolution = [-1+3i, -1-3i]; testCase.verifyEqual(actSolution,expSolution); end end end
Запустите все тесты в файле определения класса SolverTest
.
testCase = SolverTest; res = run(testCase)
Running SolverTest .. Done SolverTest __________ res = 1x2 TestResult array with properties: Name Passed Failed Incomplete Duration Details Totals: 2 Passed, 0 Failed, 0 Incomplete. 0.43185 seconds testing time.
Запускать один тест, testRealSolution
:
testCase = SolverTest;
res = run(testCase,'testRealSolution')
Running SolverTest . Done SolverTest __________ res = TestResult with properties: Name: 'SolverTest/testRealSolution' Passed: 1 Failed: 0 Incomplete: 0 Duration: 0.0103 Details: [1x1 struct] Totals: 1 Passed, 0 Failed, 0 Incomplete. 0.010346 seconds testing time.