Main Content

编译 MATLAB 单元测试

当您使用 MATLAB® 单元测试框架编写测试时,您可以创建一个独立应用程序(需要 MATLAB Compiler™)以在未安装 MATLAB 的目标计算机上运行测试:

MATLAB Compiler 仅支持基于类的单元测试。(您无法编译基于脚本或基于函数的单元测试。)此外,MATLAB Compiler 当前不支持使用性能测试框架编写的测试。

使用独立应用程序运行测试

此示例说明如何基于单元测试创建独立应用程序,并从终端窗口(在 Microsoft® Windows® 平台上)运行生成的应用程序。

在当前文件夹中名为 TestRand.m 的文件中,创建一个参数化测试类,该类用于测试 MATLAB 随机数生成器(请参阅TestRand 类定义总结)。

在当前文件夹中,创建 runMyTests 函数。此函数基于 TestRand 类创建一个测试套件,运行测试,并显示测试结果。

function runMyTests
suite = matlab.unittest.TestSuite.fromClass(?TestRand);
runner = matlab.unittest.TestRunner.withNoPlugins;
results = runner.run(suite);
disp(results)
end

通过在命令行窗口中运行 mcc 命令,将 runMyTests 函数编译为一个独立应用程序。MATLAB Compiler 在当前文件夹中生成应用程序。

mcc -m runMyTests

打开一个终端窗口,导航到您打包的独立应用程序所在的文件夹,然后运行该应用程序。

C:\work>runMyTests
  1x1200 TestResult array with properties:

    Name
    Passed
    Failed
    Incomplete
    Duration
    Details

Totals:
   1200 Passed, 0 Failed, 0 Incomplete.
   3.11 seconds testing time.

有关如何创建和运行独立应用程序的详细信息,请参阅Create Standalone Application from MATLAB Function (MATLAB Compiler)

使用独立应用程序并行运行测试

从 R2020b 开始,您可以创建支持并行运行测试的独立应用程序(需要 Parallel Computing Toolbox™)。此功能要求您在触发测试运行的文件中使用指令 %#function parallel.Pool%#function (MATLAB Compiler) pragma 通知 MATLAB Compiler 必须在编译中包含 parallel.Pool (Parallel Computing Toolbox) 对象,以提供对并行池的访问。

例如,假设要运行文件 TestRand.m 中的测试。通过编译以下函数,您可以创建一个独立应用程序来并行运行这些测试。

function runMyTestsInParallel
%#function parallel.Pool
results = runtests('TestRand.m','UseParallel',true);
disp(results)
end

使用 mcc 命令将该函数编译为一个独立应用程序。要指示 MATLAB Compiler 将测试文件包含在应用程序中,请使用 -a 选项指定文件名。

mcc -m runMyTestsInParallel -a TestRand.m

TestRand 类定义总结

以下代码提供了 TestRand 类的完整内容。

classdef TestRand < matlab.unittest.TestCase    
    properties (TestParameter)
        dim1 = createDimensionSizes;
        dim2 = createDimensionSizes;
        dim3 = createDimensionSizes;
        type = {'single','double'};
    end
    
    methods (Test)
        function testRepeatable(testCase,dim1,dim2,dim3)
            state = rng;
            firstRun = rand(dim1,dim2,dim3);
            rng(state)
            secondRun = rand(dim1,dim2,dim3);
            testCase.verifyEqual(firstRun,secondRun);
        end
        function testClass(testCase,dim1,dim2,type)
            testCase.verifyClass(rand(dim1,dim2,type),type)
        end
    end
end
 
function sizes = createDimensionSizes
% Create logarithmically spaced sizes up to 100
sizes = num2cell(round(logspace(0,2,10)));
end

另请参阅

(MATLAB Compiler) | | | | | (MATLAB Compiler)

相关主题