Как передать несколько параметров в тесты, которые используют один и тот же код настройки в Matlab xUnit?

Согласно «Как писать тесты, которые Поделиться общим кодом настройки" можно:

function test_suite = testSetupExample
 initTestSuite;

function fh = setup
 fh = figure;

function teardown(fh)
 delete(fh);

function testColormapColumns(fh)
 assertEqual(size(get(fh, 'Colormap'), 2), 3);

function testPointer(fh)
 assertEqual(get(fh, 'Pointer'), 'arrow');

Но я не мог заставить его работать с большим количеством параметров:

function test_suite = testSetupExample
 initTestSuite;

function [fh,fc] = setup
 fh = figure;
 fc = 2;
end

function teardown(fh,fc)
 delete(fh);

function testColormapColumns(fh,fc)
 assertEqual(size(get(fh, 'Colormap'), fc), 3);

function testPointer(fh,fc)
 assertEqual(get(fh, 'Pointer'), 'arrow');

Когда я запускаю тесты, он говорит:

Входной аргумент "fc" не определен.

Это почему? Я сделал что-то не так или это не поддерживается в текущей версии Matlab xUnit? Как это обойти?

PS: На самом деле мой MATLAB требует, чтобы каждая функция имела конец. Я не писал их здесь, чтобы сохранить согласованность с ручными примерами.


person Jader Dias    schedule 25.09.2009    source источник


Ответы (2)


Просто используйте структуру:

function test_suite = testSetupExample
 initTestSuite;

function [fh] = setup
 fh.one = figure;
 fh.two = 2;
end

function teardown(fh)
 delete(fh.one);


function testColormapColumns(fh)
 assertEqual(size(get(fh.one, 'Colormap'), fc.two), 3);

и Т. Д.

person Marc    schedule 27.09.2009

Платформа вызывает вашу функцию настройки только с одним выходным аргументом. Если вы хотите передать больше информации из вашей функции настройки, объедините все в структуру.

Кроме того, здесь приведены правила завершения функции с помощью end. (Эти правила были введены в MATLAB 7.0 в 2004 году и с тех пор не менялись.)

Если какая-либо функция в файле завершается концом, то все функции в этом файле должны завершаться концом.

Вложенные функции всегда должны заканчиваться концом. Следовательно, если файл содержит вложенную функцию, то все функции в этом файле должны заканчиваться концом.

Все функции и методы в файлах classdef должны заканчиваться концом.

person Steve Eddins    schedule 25.09.2009
comment
Спасибо за концовку =) - person Jader Dias; 25.09.2009