【发布时间】:2016-02-09 14:58:34
【问题描述】:
我正在尝试创建一个参数化的 Matlab 单元测试,其中 TestParameter 属性由某些代码“动态”生成(例如,使用 for 循环)。
作为一个简化的例子,假设我的代码是
classdef partest < matlab.unittest.TestCase
properties (TestParameter)
level = struct('level1', 1, 'level2', 2, 'level3', 3, 'level4', 4)
end
methods (Test)
function testModeling(testCase, level)
fprintf('Testing level %d\n', level);
end
end
end
但在我的真实代码中,我有 100 个级别。我试图把它放在一个单独的方法中,比如
classdef partest < matlab.unittest.TestCase
methods (Static)
function level = getLevel()
for i=1:100
level.(sprintf('Level%d', i)) = i;
end
end
end
properties (TestParameter)
level = partest.getLevel()
end
methods (Test)
function testModeling(testCase, level)
fprintf('Testing level %d\n', level);
end
end
end
但这不起作用;我收到错误(Matlab 2014b):
>> runtests partest
Error using matlab.unittest.TestSuite.fromFile (line 163)
The class partest has no property or method named 'getLevel'.
我可以将getLevel() 函数移动到另一个文件中,但我想将它保存在一个文件中。
【问题讨论】:
-
我无法运行你的代码,因为我的 matlab 版本太旧了,但你可以在原来的课程中尝试
level = cell2struct(num2cell(1:n), arrayfun(@(x)(['level',num2str(x)]),1:n,'uni',false), 2)。 -
@Daniel:当然我的真实例子更复杂:)
标签: matlab unit-testing parameterized-unit-test