本周文件交换选择

我们最好的用户反馈

我觉得你只是想考验我!

格雷格他本周的选择是单元测试C代码使用MATLAB和MATLAB Coder通过比尔周

一般来说,我尽量选择由MathWorks以外的人开发的条目,但是Bill提供了一个很好的演示,它结合了我所热衷的两个主题:形式化测试和代码生成。

将单元测试与MATLAB Coder结合使用可以实现三个功能:

  • 自动为生成的c代码定义接口数据类型。
  • 验证MATLAB生成的c代码产生了预期的结果。
  • 根据MATLAB环境外开发的c代码执行在MATLAB中开发的测试。
  • 我建议你看一看与这篇文章相关的Bill的视频。

    内容

    什么是单元测试,我为什么要使用它?

    从根本上说,单元测试确定软件的单个特性是否在特定条件下产生预期结果。理论是,通过保持测试“小”和具体,更容易开发和维护软件和测试。

    进行测试的主要好处是它有助于确定设计是否满足其需求。这可以应用于软件的初始设计,或者当您决定对软件进行更改时。

    还有各种各样的附加哲学和技术可以应用单元测试,例如行为驱动开发(BDD).我不会在这里深入讨论,我只想说,如何使用单元测试将决定如何编写它们。

    等待……用MATLAB进行单元测试?

    更具体地说,在MATLAB中有一个单元测试框架可用。它是基于xUnit框架。对于那些可能受困于旧版本的MATLAB的人来说,值得看看这个文件交换条目

    我喜欢在MATLAB中使用单元测试框架的原因是它提供了定义测试的一致方法,以及许多自动化测试执行的工具和函数。它还提供了多个复杂级别,因此如果您不喜欢编写类和方法来练习代码,可以使用simple脚本功能代替。

    关于使用这个框架的更多信息,我建议查看Andy的博客在这里

    为什么我要用MATLAB在我的c代码上运行测试?

    这似乎是不必要的,可能只是使用一个工具,因为你可以。

    我们会使用正确的工具来完成这项工作。如果您希望您的测试能够利用您正在使用的语言中不容易提供的其他MATLAB特性(绘图、过滤、数据管理),那么在MATLAB中开发您的测试套件可能非常有意义。

    比尔没有提到的附带好处

    在我上面链接的视频中,Bill很好地介绍了如何将单元测试应用到c代码测试过程中。然而,从MATLAB中生成c代码还有一个额外的好处,Bill在这个例子的视频中没有直接提到。

    如果你看看MATLAB Coder应用程序的第二步“定义输入类型”,你会注意到run_unit_tests出现在“自动定义输入类型”对话框中。

    通过执行此对话框中的代码,MATLAB Coder可以确定正在为其生成代码的函数的输入上使用的数据类型,并应用适当的约束。

    unittesttypedefinitionscript

    在本例中,您将看到addOne函数有一个输入变量x哪种类型是标量(1 x 1)

    unittesttypedefinitionresult

    如何使用该功能的示例可以在视频的2:30分观看在这里

    输入的类型定义是必需的,因为c代码是静态类型语言,而MATLAB是动态类型语言。(看看这个讨论有关这些类型系统如何不同的详细信息)

    使测试失败明显的修改。

    当单元测试失败时,您实际上必须查看测试结果摘要,以确定是否存在失败。

    为了在出现失败时更加突出,我建议在出现任何测试失败时抛出一个错误或断言。我改变了run_unit_tests.m致以下:

    结果=运行测试(PWD);if any([results.Failed])错误('单元测试失败');结束

    unittesterrormessage

    这样,就很明显有一个问题需要解决。

    对这篇文章有什么想法吗?

    让我们知道在这里




    由MATLAB®9.0发布

    |
    • 打印
    • 发送电子邮件

    评论

    如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。