仿真与测试:单元测试与Test Harness

这篇具有很好参考价值的文章主要介绍了仿真与测试:单元测试与Test Harness。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文描述单元测试的概念,以及Test Harness建立的方法和简单的单元测试过程。

1 单元测试

单元测试,简单来说就是在Simulink模型中只测试一小部分单元的功能。关于单元测试的概念网上有很多资料了,这里不再赘述。博主从实际工作经验的角度来谈谈单元测试的价值。

1.1 场景举例

举个简单的例子,某个工程师需要设计一个逻辑,当毫米波雷达跟踪的目标的置信度大于等于90时,认为该目标是有效目标。于是该工程师设计模型如下:
仿真与测试:单元测试与Test Harness
工程师不小心把判断条件写成大于号,而不是大于等于号。这就导致了置信度为90的目标全部被视为Invalid,从而影响了后面一大片的算法丢失了重要的输入信息。如果没有单元测试,这个问题就会被带到开发流程的后期。例如,该模型生成代码、编译集成、刷到车上以后,实车测试的时候发现后面的功能状态机一直不激活,或者控制信号一直不激活。然后再回头一点点往前撸信号,查找半天才定位到模型中的这个小bug。

这种情况在工作中时常发生,而且并不能因此责怪工程师的水平不行,因为人总会犯错误,避免不了“写bug”这种情况。因此,需要从流程体系的角度来尽可能提早发现设计问题。单元测试就可以做到这样的保障,譬如给上图这一小部分单元输入一个数值为90的Confidence信号,通过模型仿真发现输出竟然是False,就可以快速地定位这个缺陷,尽早地修复他。

1.2 简单的测试方法

既然知道了要在模型中先测试一下,不了解Test Harness的人可能会这么做。把已有的模型改造一下,把inport和outport端口去掉,给他几个输入,再用Scope或者disp模块看看输出对不对。模型改造成如下所示。
仿真与测试:单元测试与Test Harness
仿真后可以看到disp中的结果。这么做确实看到了输出的结果,发现了输入的置信度为90时,输出的是0。但是这样操作模型会有很多问题:

  • 为了仿真改掉了原有的模型,测完了还得改回去;
  • 测试用例不方便保留下来,以后复测的时候还得手动操作一番;
  • 如果想要多个不同的测试输入得把输入改来改去,不好切换;

针对这些问题,可以直接使用Simulink Test工具箱里的Test Harness,为设计专属的单元测试环境,引用原来模型的某个子系统或者整个模型的算法。后文会用一个例子来说明搭建Test Harness的过程,然后直观地看到他的好处。

2 Test Harness建立

这一节用以前的一篇博客搭建的模型,来演示一下Test Harness的建立过程,并且通过简单的输入进行仿真。

2.1 模型配置

1)首先打开需要测试的模型,这里用以前博主做的一个模型来演示:《Simulink建模:LKA系统功能状态机建模》。
仿真与测试:单元测试与Test Harness
2)在模型设置里,需要设置为离散,并且仿真步长设置为和实际控制器中的调度周期一致;
仿真与测试:单元测试与Test Harness
这样的话,模型就配置完毕了。

2.2 创建Test Harness

创建Test Harness有两种做法,为整个slx模型创建,或者为模型中的某个子系统创建。

博主比较倾向于后者,因为单元更小一点,可以聚焦于这部分的功能进行测试。即使是想测试整个模型,也可以将整个模型的最上层打包成一个大型的子系统进行测试。后文就以顶层的子系统LKA_StateMachine为例,来创建TestHarness。

1)右键点击这个子系统,选中Create for XXX
仿真与测试:单元测试与Test Harness
2)在界面中定一个名字,企鹅定好输入输出的形式;
仿真与测试:单元测试与Test Harness
这里博主选择了输入为Signal Builder,因为用的比较顺手,也可以选择From Workspace导入外部数据,或者Test Sequence等等。Signal Builder的用法参照《仿真与测试:通过Signal Builder模块生成输入信号》。

另外,如果勾选了Save test harness extern选项后,会生成一个用来保存harness模型的外部文件,否则生成的harness会依附于当前的模型。博主习惯后者,减少一些文件的管理。

3)点击OK后生成了一个Harness模型,按照之前的选择配置了输入为Signal Builder,引用了原模型的子系统作为中间算法;
仿真与测试:单元测试与Test Harness
这样的话,就不需要对原来的模型进行改造,也能进行单元测试。

4)打开Signal Builder设计一个简单的测试用例输入;
仿真与测试:单元测试与Test Harness
测试用例输入表示,3s时开关打开,1-5s时,车速从0加到80。然后通过信号log可以看到输出的LKA_Status是否符合该输入的预期。
仿真与测试:单元测试与Test Harness
这样就完成了一个Test Harness的创建及一个简单的单元测试。这个测试环境可以和

3 总结

本文描述单元测试的概念,以及Test Harness建立的方法和简单的单元测试过程。本文只是一个简单的单元测试,还没有发挥出Test Harness的更多功能。Test Harness配合Test Manager和Design Verify,可以搭建一套成体系的测试方法。

>>返回个人博客总目录文章来源地址https://www.toymoban.com/news/detail-443838.html

到了这里,关于仿真与测试:单元测试与Test Harness的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vitest单元测试配合@vue/test-utils之组件单元测试篇

    vitest 是由 vite 提供支持的极速单元测试框架,VueTestUtils 是 Vue.js 的官方测试实用程序库,vitest 本身是不支持单元组件测试的,需要配合 test-utils 来完成组件单元测试,安装与基本 API 就不再赘述,学会阅读文档与查找资料是一个程序员的基本功 demo 由一个组件和测试文件组成

    2024年03月16日
    浏览(39)
  • IDEA中 单元测试@Test的使用

    首先我在自己的module-zzz中有hamcrest-core-1.3.jar 和 Junit-4.12.jar两个包 ,并且可以正常使用test测试方法。要想在另外一个module-chapter01中正常使用test,则可以进行如下操作:第一步:File -- Project Structure -- Modules–Dependencies 第二步:点击右上角的+  第三步:点击JARs or directories…

    2024年02月07日
    浏览(37)
  • idea中用不了test单元测试插件

    这是因为你没有安装test相关的插件,我们需要下载一个插件,   首先打开idea--File--setting--plugins(如下图) 搜索Junit,然后安装第一个插件,重启应用即可使用。 注意:在实际程序应用中,我们输入@test后,还要Alt+Enter进行导包。 安装好插件后就可操作了,

    2024年02月12日
    浏览(33)
  • @Test单元测试注入bean 3种方式

    @ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {CachingConfig.class}) 如下:     @Resource     private CacheManager cacheManager; 是CachingConfig的bean 在类上添加以下代码: 在执行test之前会先执行启动项目,后对象会

    2024年02月11日
    浏览(25)
  • idea中添加单元测试@Test注解引入

    添加依赖,使用 @Test 即可。 @Test注解找不到或没有的原因: 我们要进行项目的某部分的test测试,会放在名为test的文件夹下,而现在我们的文件夹测试并不是test下面的一个测试,所以如果我们希望在别的地方也可以利用test注解,只需要去掉scope这一行就行了。

    2024年02月22日
    浏览(35)
  • 利用Simulink Test进行模型单元测试 - 1

    随手搭建了一个demo模型MilTestModel,模型中不带参数 1.模型空白处右击 测试框架 为‘MilTestModel’创建 菜单 2.在创建测试框架对话框中,点击OK,对应的测试框架MilTestMode_Harness1就自动打开了 1.在HARNESS标签下点击 Simulik Test Manager 2.在Simulink Test Manager中,点击New TestFile打开保存文

    2024年02月13日
    浏览(21)
  • JUnit单元测试,test文件夹创建,测试类的创建

    软件测试是软件生命周期的一个重要过程。软件生命周期软件测试有很多的分类,这里我们主要说的是单元测试(测试分类这个分类很清晰,可以看看) test文件夹中专门用来写测试程序,以下是步骤: 此时,你会发现你创建的test文件夹变成了绿色,则说明你已经成功创建。

    2024年02月12日
    浏览(30)
  • test-01-java 单元测试框架 junit 入门介绍

    JUnit 是一个用于编写可重复测试的简单框架。 它是 xUnit 架构的一种实例,专门用于单元测试框架。 What to test? Need Desc Right 结果是否正确 B 边界条件是否满足 I 能反向关联吗 C 有其他手段交叉检查吗 E 是否可以强制异常发生 P 性能问题 CalculatorTest 类包含了一个测试方法 test

    2024年02月04日
    浏览(31)
  • [C++] 基础教程 - 如何使用google test进行单元测试

    https://download.csdn.net/download/u011775793/88601877 单元测试是一种软件测试方法,用于测试代码中的最小可测试单元。在软件开发中,我们通常将代码分解为多个模块或类,每个模块或类都有自己的功能和行为。单元测试的目的是确保每个模块或类都能正常工作,不会影响其他模块或

    2024年02月04日
    浏览(32)
  • springboot项目test单元测试java.lang.NullPointerException问题

    最近在测试写好mapper相关接口时是,出现空指针异常,所以记录一下。 在测试用户登录时,出现如下错误 测试方法 错误信息 通过分析日志了解到原因是 无法调用“AdminUserMapper.login(String, String)”,因为“this.adminUserMapper”为空 应该是AdminUserMapper没有注入进来,但是自己

    2024年02月02日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包