我可以使用模拟对象来模拟串口吗?

5
我正在开发一个使用C++/CLI与串口通信的应用程序,并使用MS Test进行测试。我正在了解有关模拟对象的知识,但仅在概念上理解它。我在单元测试中面临许多挑战,主要是因为我用于向我的应用程序发送数据的模拟器以某种方式运行,我无法改变其行为。
我想知道以下内容:
  • 我可以使用模拟对象来模拟串口行为吗?它的输入缓冲区?
  • 我可以使用模拟对象来更改串口行为(即假装端口被阻塞)吗?
  • 模拟对象是否可用于更基本的类(例如,我想测试分配数组的代码部分。我可以让模拟对象假装由于内存不足而导致内存分配失败)?
  • Rhino Mocks适用于模拟C++/CLI应用程序吗?
  • 您有没有其他模拟框架(最好是免费软件,但也接受付费软件),在您的经验中,这些框架对此任务很好?
  • 它们是否与MS Test兼容。

2
当然你可以模拟它。但是如果没有完整的行为规范,你将无法模拟与真实设备通信的所有细微差别。在大多数情况下,这并不重要,但我无法判断你的情况。 - Ben Voigt
我刚刚制作了这个模块https://serialmock.readthedocs.org(有点晚了,但是我仍然需要它,而且找不到任何可以完成此操作的东西) - Joran Beasley
1个回答

5
我来自于C语言嵌入式背景,但我觉得你的问题对于模拟是相当普遍的,答案应该适用。
问:我可以使用Mock对象来模拟串口行为吗?它的输入缓冲区? 答:可以。这里有一个非常好的模拟UART的例子: http://throwtheswitch.org/white-papers/when-bad-code-runs-green.html 问:我可以使用Mock对象来改变串口行为(例如假装端口被阻塞)吗? 答:这正是Mocking的用途。只要您的代码分为层,例如:
- 硬件驱动程序层 - 控制层 - 针对外部模块的API层
那么您可以模拟任何必要的层以模拟有效操作:缓冲区已满、硬件故障等。
问:Mock可以用于更基本的类(例如,我想测试我的代码的一部分,它分配了一个数组。我可以让Mock假装由于内存不足而导致内存分配失败)吗? 答:是的,这类似于前一个问题,如果您的代码已经包装了一些内存分配代码,则可以模拟包装器返回的内容。也许您有一个内存管理器类型类。
问:Rhino Mocks适用于模拟C++/CLI应用程序吗? 答:不确定。
问:在您的经验中,是否有其他Mocking框架(最好是免费软件,但可以接受付费框架)适合此任务? 答:上面链接的例子来自Unity + CMock + Ceedling(主要是C测试框架)。它是开源的,对嵌入式C应用程序非常有效。不确定C ++支持情况。
问:这些是否与MS Test兼容? 答:抱歉,我不清楚。

@ Derek 互联网档案馆镜像 - beerbajay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接