在MATLAB单元测试中导入包

时间:2016-12-20 08:57:12

标签: matlab unit-testing

我想在MATLAB单元测试中导入一个包。我需要在很多测试方法中从这个包中实例化对象,所以我认为导入函数最好放在TestClassSetup方法中。所以,我的代码看起来像这样:

methods (TestClassSetup)
    function load_mockupMatrix(testCase)
        import('technicalIndicators.*');
        testCase.data = tests.createMockupMatrix;
    end
end

显然,technicalIndicators包在单个测试方法中不可用。我的猜测是这与导入函数的范围有关。

现在,代码中的方式和位置我应该使用导入功能,以便能够在单独的测试方法中使用此包吗?

1 个答案:

答案 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

通常,还建议明确导入特定的类和函数 ,而不是使用.*表示法来防止可能的名称冲突。