exponenta event banner

Запись простого теста с использованием функций

Программу 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 возвращает правильные действительные решения для конкретных коэффициентов. Например, уравнение x2-3x + 2 = 0 имеет вещественные решения x = 1 и 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 возвращает правильные мнимые решения для определенных коэффициентов. Например, уравнение x2 + 2x + 10 = 0 имеет мнимые решения x = -1 + 3i и 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.

См. также

| |

Связанные темы