编译 MATLAB 单元测试
当您使用 MATLAB® 单元测试框架编写测试时,您可以创建一个独立应用程序(需要 MATLAB Compiler™)以在未安装 MATLAB 的目标计算机上运行测试:
要编译 MATLAB 代码,请运行
compiler.build.standaloneApplication(MATLAB Compiler) 或mcc(MATLAB Compiler) 命令,或使用独立应用程序编译器 (MATLAB Compiler)。要运行独立应用程序,请安装 MATLAB Runtime。(如果您使用独立应用程序编译器,您可以决定是否在生成的应用程序中包含 MATLAB Runtime 安装程序。)有关详细信息,请参阅下载并安装 MATLAB Runtime (MATLAB Compiler)。
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.
有关如何创建和运行独立应用程序的详细信息,请参阅从 MATLAB 创建独立应用程序 (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
另请参阅
mcc (MATLAB Compiler) | run (TestRunner) | run (TestSuite) | runtests | runInParallel | compiler.build.standaloneApplication (MATLAB Compiler)
主题
- 编写单元测试的方法
- 从 MATLAB 创建独立应用程序 (MATLAB Compiler)