单元测试与MATLAB编码器生成的代码
这个例子展示了如何测试的输出生成的代码通过使用MATLAB®单元测试与MATLAB®编码器™。
监控回归代码功能,您可以编写单元测试代码。在MATLAB中,您可以创建并运行单元测试通过使用MATLAB的测试框架。测试代码和独立的墨西哥人从MATLAB代码生成的代码,您可以使用相同的单元测试用来测试MATLAB代码。
一个墨西哥人函数包括仪器,帮助你生成生产代码检测问题。运行单元测试在一个墨西哥人在MATLAB功能测试的代码。生成独立的代码(静态库和共享库)不包括仪表和可以包括优化不出现在墨西哥人代码。在独立运行单元测试代码在一个单独的过程在MATLAB之外,使用software-in-the-loop (SIL)或processor-in-the-loop(公益诉讼)执行。使用硅或公益诉讼执行,必须有嵌入式程序员®。
这个例子展示了如何:
创建调用你的MATLAB函数的MATLAB的单元测试。这个示例使用基于类的单元测试。
生成一个墨西哥人函数从MATLAB函数。
在墨西哥人运行单元测试功能。
运行在独立的单元测试代码通过使用银。
检查文件
这个示例使用访问文件,点击打开脚本。
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函数代表类型。这个应用程序使用这个文件来确定输入类型。测试文件可以是不同的测试文件,您使用的单元测试。
生成墨西哥人功能,生成代码页面:
为构建类型,指定
墨西哥人
。点击生成。
在运行单元测试生成的墨西哥人。
点击验证代码。
在指定的测试文件
run_unit_tests
。确保你设定运行使用来生成的代码。
点击运行生成的代码。
应用程序显示了测试输出测试输出选项卡。单元测试通过。
修改MATLAB代码后运行单元测试
修改addOne
所以常数1是单精度。编辑addOne
在左上角的应用,源代码,点击addOne
。
生成一个墨西哥人功能的修改功能,点击生成。
运行单元测试:
点击验证代码。
确保你的测试文件
run_unit_tests
和运行使用来生成的代码点击运行生成的代码。
单元测试失败。
reallyAddsOne
失败,因为输出的类类型单一,不翻倍。addsFraction
失败,因为输出类和值不匹配预期的类和值。输出类型是单一的,而不是翻倍。4.1415930,单精确输出的值是不一样的双精度值的输出,4.141592653589793。
与Software-in-the-Loop运行单元测试执行的应用程序(需要嵌入式编码)
如果你有嵌入式编码,你可以在生成的独立代码运行单元测试(静态库和共享库)通过使用software-in-the-loop (SIL)执行。
生成一个库addOne
。例如,生成一个静态库。
在生成代码页面:
为构建类型,指定
静态库
。点击生成。
生成的代码上运行单元测试。
点击验证代码。
在指定的测试文件
run_unit_tests
。确保你设定运行使用来生成的代码。
点击运行生成的代码。
终止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。