我有几个MatLab功能,几乎所有功能都有测试功能。目前对于测试函数没有真正的命名约定,因此我最终得到了test_functionName
,tests_functionName
,FunctionName_Test
等函数。
然后,我看到这些功能有两个共同点:
我想编写一个函数,在给定文件夹(或PATH)下找到所有尊重这两个条件并执行它们的函数。这样我就可以在一次调用中执行所有测试功能。
我有什么方法可以做到吗?
答案 0 :(得分:3)
您可以执行以下操作:
fun=dir('*test*.m'); %% look for matlab scripts which name contains 'test'
fun={fun.name}; %% extract their names
fun=fun(cellfun(@(x) (nargin(x)==0),fun)); %% select the ones with no input arguments
fun = regexprep(fun, '.m', ''); % remove '.m' from the filenames
cellfun(@eval,fun); %% execute them
答案 1 :(得分:1)
首先,获取文件夹下的所有文件:
d = dir(myFolder);
删除那些扩展名不是.m
的人:
indexes = strcmp('.m',{d.ext});
d(indexes) = [];
然后,收集他们所有的名字:
fileNames = {d.Name};
用测试检查哪一个开始或结束:
testPrefix = strncmp('test',fileNames)
testPostfix = %# Left as an exercise to the reader
sutiableFileNames = fileNames( testPrefix | testPostfix);
现在你可以使用`nargin'来检查参数的数量:
numOfInParams = cellfun(@nargin,sutiableFileNames);
numOfOutParams = cellfun(@nargout,sutiableFileNames);
然后再过滤(我想你已经有了想法)