我想在MATLAB单元测试中导入一个包。我需要在很多测试方法中从这个包中实例化对象,所以我认为导入函数最好放在TestClassSetup
方法中。所以,我的代码看起来像这样:
methods (TestClassSetup)
function load_mockupMatrix(testCase)
import('technicalIndicators.*');
testCase.data = tests.createMockupMatrix;
end
end
显然,technicalIndicators
包在单个测试方法中不可用。我的猜测是这与导入函数的范围有关。
现在,代码中的方式和位置我应该使用导入功能,以便能够在单独的测试方法中使用此包吗?
答案 0 :(得分:1)
import
命令仅影响使用它的函数的导入列表。由于类的每个方法都有不同的工作空间,因此设置方法中的import
调用在任何实际测试中都不起作用。
有几种方法可以做到这一点。
一种方法是将import
语句放在每个测试方法
methods (Test)
function myFirstTest(testCase)
import('technicalIndicators.*');
% Do stuff
end
end
另一个是您可能创建一个TestCase
子类的属性,该属性包含所需类的构造函数的函数句柄(您可以在TestClassSetup
期间指定)。这基本上会给你一个类的“快捷方式”,而不是每次在每个实例化它的完全限定名称的方法中显式地导入它。
classdef MyTest < matlab.unittest.TestCase
properties
TechnicalIndicator1
TechnicalIndicator2
end
methods (TestClassSetup)
function import_stuff(testCase)
import technicalIndicators.*
testCase.TechnicalIndicator1 = @TechnicalIndicator1;
testCase.TechnicalIndicator2 = @TechnicalIndicator2;
end
end
methods (Test)
function MySecondTest(testCase)
thing = testCase.TechnicalIndicator1();
% Do test
end
end
end
通常,还建议明确导入特定的类和函数 ,而不是使用.*
表示法来防止可能的名称冲突。