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