2009-09-25 4 views
4

Согласно "How to Write Tests That Share Common Set-Up Code" это возможно:Как передать несколько параметров для тестов, которые используют один и тот же установочный код в 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'); 

Когда я runtests он говорит:

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

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

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

ответ

4

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

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); 

т.д.

7

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

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

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

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

Все функции и методы в файлах classdef должны быть завершены с помощью конца.

+1

Благодарность за заканчивающегося объяснение =) –