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

Можно протестировать программу MATLAB ®, определив модульные тесты в одном файле, который содержит основную функцию и локальные тестовые функции. В функциональном тесте каждая локальная функция выполняет фрагмент программного обеспечения и определяет правильность полученного результата. Для получения дополнительной информации о функциональных тестах см. Раздел «Запись функциональных модульных тестов».

В этом примере показано, как записать функциональный тест, чтобы определить правильность функции, определенной в файле в текущей папке. The 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 function, создайте тестовый файл quadraticSolverTest.m в текущей папке. Затем задайте основную функцию и две локальные функции в файле для тестирования quadraticSolver против реальных и мнимых решений. Имя основной и локальных функций должно начинаться или заканчиваться словом «test», которое не учитывает регистр. Кроме того, имя основной функции должно соответствовать имени вашего тестового файла.

Определите главную функцию

Чтобы запустить основанные на функции модульные тесты, вы должны задать главную функцию, которая собирает все локальные тестовые функции в тестовый массив. Определите основную функцию quadraticSolverTest в вашем тестовом файле. Основная функция вызывает functiontests чтобы сгенерировать тестовый массив tests. Передайте localfunctions на functiontests чтобы автоматически сгенерировать cell-массив указателей на функцию к локальным функциям в вашем файле.

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.

См. также

| |

Похожие темы