我有一个类从工作空间读取所有变量,并获取所有传输函数(类类型tf
)的列表,并将它们存储在另一个类中(此处未表示)。
classdef TransferFunctionFactory < handle
% This class allows to import a series of transfer function loaded from
% different sources, like a file folder, workspace and so on..
% Public section
methods(Access = public)
function collection = fromWorkspace(this)
% Create a collection of transfer function that are stored in the workspace.
% Returns:
% Collection of transfer functions.
collection = App.TransferFunctionCollection();
variables = who; % Here I should see w1, w2, w3, and w4 in variables
for i = 1 : length(variables)
if isa(eval(variables{i}), 'tf')
trf = App.TransferFunction();
trf.setAttribute('Name', variables{i});
trf.setTransferFunction(eval(variables{i}));
collection.addTransferFunction(trf);
end
end
end
end
我想进行单元测试,所以我创建了一个测试类:
classdef TransferFunctionFactory < matlab.unittest.TestCase
methods (Test)
function loadControllersFromWorkspace(testCase)
collection = factory.fromWorkspace();
testCase.verifyGreaterThanOrEqual(collection.getSize(), 3);
end
end
end
为了执行单元测试,我需要在工作空间中设置一些变量,以便从函数中进行分析。我尝试过类似的事情:
function loadControllersFromWorkspace(testCase)
factory = App.TransferFunctionFactory();
assignin('base', 'w1', tf(1 + 's'));
assignin('base', 'w2', tf(3 / 's'));
assignin('base', 'w3', 4.3);
assignin('base', 'w4', tf(1 / ('s' + 1)));
who
collection = factory.fromWorkspace();
testCase.verifyGreaterThanOrEqual(collection.getSize(), 3);
end
但它不起作用。当我输入factory.fromWorkspace
方法时,我看不到w1
,w2
,w3
,w4
作为who
的输出,我无法使用它们。
如何在单元测试类方法中设置工作空间中的变量,以便从测试中调用的函数/方法中看到它们?
答案 0 :(得分:1)
我使用null
解决了问题。在我的方法中,我使用它来在需要时从基础工作区读取变量:
evalin
当我需要在工作区中保存变量时,我也在测试方法中使用它:
function collection = fromWorkspace(this)
collection = App.TransferFunctionCollection();
variables = evalin('base', 'who');
disp(variables);
for i = 1 : length(variables)
command = ['isa(', variables{i}, ', ''tf'')'];
if evalin('base',command);
trf = App.TransferFunction();
trf.setTransferFunction(evalin('base', variables{i}));
collection.addTransferFunction(trf);
end
end
end