主要内容

单元测试与MATLAB编码器生成的代码

这个例子展示了如何测试的输出生成的代码通过使用MATLAB®单元测试与MATLAB®编码器™。

监控回归代码功能,您可以编写单元测试代码。在MATLAB中,您可以创建并运行单元测试通过使用MATLAB的测试框架。测试代码和独立的墨西哥人从MATLAB代码生成的代码,您可以使用相同的单元测试用来测试MATLAB代码。

一个墨西哥人函数包括仪器,帮助你生成生产代码检测问题。运行单元测试在一个墨西哥人在MATLAB功能测试的代码。生成独立的代码(静态库和共享库)不包括仪表和可以包括优化不出现在墨西哥人代码。在独立运行单元测试代码在一个单独的过程在MATLAB之外,使用software-in-the-loop (SIL)或processor-in-the-loop(公益诉讼)执行。使用硅或公益诉讼执行,必须有嵌入式程序员®。

这个例子展示了如何:

  1. 创建调用你的MATLAB函数的MATLAB的单元测试。这个示例使用基于类的单元测试。

  2. 生成一个墨西哥人函数从MATLAB函数。

  3. 在墨西哥人运行单元测试功能。

  4. 运行在独立的单元测试代码通过使用银。

检查文件

这个示例使用访问文件,点击打开脚本

addOne.m

的例子对墨西哥人执行单元测试函数产生的MATLAB函数addOne。这个函数添加1到它的输入参数。

函数y = addOne (x)% 2014 - 2016版权MathWorks公司。% # codegeny = x + 1;结束

TestAddOne.m

该文件TestAddOne.m包含一个基于类的单元测试有两个测试。

  • reallyAddsOne验证输入1时,答案是2。

  • addsFraction验证,当输入是π,答案是pi + 1。

编写类based-unit测试的更多信息,请参阅作者在MATLAB基于类的单元测试

classdefTestAddOne < matlab.unittest.TestCase% 2014 - 2016版权MathWorks公司。方法(测试)函数reallyAddsOne (testCase) x = 1;y = addOne (x);testCase。verifyEqual (y, 2);结束函数addsFraction (testCase) x =π;y = addOne (x);testCase。verifyEqual (y、x + 1);结束结束结束

run_unit_tests.m

该文件run_unit_tests.m调用runtests运行测试TestAddOne.m

%运行单元测试% 2014 - 2016版权MathWorks公司。runtests (“TestAddOne”)

运行单元测试在一个墨西哥人与MATLAB函数编码器应用

打开MATLAB编码器应用MATLAB将来发布应用程序选项卡,在代码生成MATLAB编码器应用图标,单击。

提前准备代码生成,通过应用程序的步骤。

  • 选择源文件页面上,指定入口点函数addOne

  • 定义输入类型页面上,指定输入参数x是一个双标量。

  • 检查运行时问题步,输入代码调用addOne代表输入。例如,addOne (2)。执行这一步骤,以确保你可以为你的MATLAB函数生成代码,生成的代码没有运行时的问题。

对于更复杂的MATLAB函数,您可能想要提供一个测试文件定义输入类型检查运行时问题步骤。这个测试文件调用MATLAB函数代表类型。这个应用程序使用这个文件来确定输入类型。测试文件可以是不同的测试文件,您使用的单元测试。

生成墨西哥人功能,生成代码页面:

  1. 构建类型,指定墨西哥人

  2. 点击生成

在运行单元测试生成的墨西哥人。

  1. 点击验证代码

  2. 在指定的测试文件run_unit_tests

  3. 确保你设定运行使用生成的代码

  4. 点击运行生成的代码

应用程序显示了测试输出测试输出选项卡。单元测试通过。

修改MATLAB代码后运行单元测试

修改addOne所以常数1是单精度。编辑addOne在左上角的应用,源代码,点击addOne

生成一个墨西哥人功能的修改功能,点击生成

运行单元测试:

  1. 点击验证代码

  2. 确保你的测试文件run_unit_tests运行使用生成的代码

  3. 点击运行生成的代码

单元测试失败。

  • reallyAddsOne失败,因为输出的类类型单一,不翻倍。

  • addsFraction失败,因为输出类和值不匹配预期的类和值。输出类型是单一的,而不是翻倍。4.1415930,单精确输出的值是不一样的双精度值的输出,4.141592653589793。

与Software-in-the-Loop运行单元测试执行的应用程序(需要嵌入式编码)

如果你有嵌入式编码,你可以在生成的独立代码运行单元测试(静态库和共享库)通过使用software-in-the-loop (SIL)执行。

生成一个库addOne。例如,生成一个静态库。

生成代码页面:

  1. 构建类型,指定静态库

  2. 点击生成

生成的代码上运行单元测试。

  1. 点击验证代码

  2. 在指定的测试文件run_unit_tests

  3. 确保你设定运行使用生成的代码

  4. 点击运行生成的代码

终止SIL执行,点击停止SIL确认

运行单元测试在一个墨西哥人通过使用命令行工作流功能

如果您使用命令行工作流来生成代码,您可以运行单元测试在一个墨西哥人通过使用函数coder.runTest与一个测试文件,运行单元测试。

生成一个墨西哥人您想要测试的功能函数。对于这个示例,指定输入参数是一个双标量通过提供一个示例输入值。

codegenaddOnearg游戏{2}

在墨西哥人运行单元测试功能。指定测试文件run_unit_tests和函数addOne。当coder.runTest运行测试文件,它取代调用addOne与调用addOne_mex。单元测试运行在墨西哥人函数代替原来的MATLAB函数。

coder.runTest (“run_unit_tests”,“addOne”)
运行TestAddOne . .完成TestAddOne __________ ans = 1 x2 TestResult数组属性:名称传递失败的不完整的时间细节总数:2了,失败了,0不完整,测试时间0.046951秒。

在命令行运行单元测试与Software-in-the-Loop执行(需要嵌入式编码)

如果你有嵌入式编码,你可以在生成的独立代码运行单元测试(静态库和共享库)通过使用software-in-the-loop (SIL)执行。

创建一个coder.EmbeddedCodeConfig对象的静态库。

cfg = coder.config (“自由”);

为思科配置对象。

cfg。VerificationMode =“银”;

生成代码的MATLAB函数和SIL接口。

codegen配置cfgarg游戏{2}addOne

运行一个测试文件,运行单元测试与SIL接口。

coder.runTest (“run_unit_tests”,(“addOne_sil”。,mexext])

终止SIL)执行。

点击明确addOne_sil

另请参阅

相关的话题