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

时间:2011-04-20 09:12:22

标签: unit-testing mocking c++-cli serial-port

我正在使用C ++ / CLI开发一个应用程序,它通过串行端口与设备通信。并使用MS Test测试它们。我只是阅读有关模拟对象的内容,并且只是在概念上理解它。我在单元测试中面临很多挑战,主要是因为我用来通过串口将数据发送到我的应用程序的模拟器以某种方式运行,我不能让它改变它的行为。

我想知道的是:

  • 我可以使用模拟对象来模仿串口行为吗?它的输入缓冲区?
  • 我可以使用模拟对象更改串行端口行为(即假装端口被阻止)。
  • 可以将mocks用于更基本的类(例如,我想测试分配数组的代码的一部分。我可以让mock假装由于内存不足而导致内存分配失败)
  • Rhino Mocks是否适合模拟C ++ / CLI应用程序?
  • 根据您的经验,任何其他模拟框架(优选免费软件,但对付费框架开放)对此任务有好处吗?
  • 这些可以通过MS测试获得。

1 个答案:

答案 0 :(得分:5)

我是在C嵌入式背景下回答这个问题,但我觉得你的问题在嘲笑方面相当普遍,答案应该适用。

  

我可以使用模拟对象来模仿串行端口行为吗?它的输入   缓冲

是的,这是一个非常好的模拟UART的例子: http://throwtheswitch.org/white-papers/when-bad-code-runs-green.html

  

我可以使用模拟对象来更改串行端口行为(即假装端口>被阻止)。

这正是嘲笑的目的。只要您的代码被分成多个层,例如

  • 硬件驱动程序层
  • 控制层
  • 外部模块的API层

然后你可以模拟模拟有效操作所需的任何层:缓冲区满,硬件故障等。

  

可以将mocks用于更基本的类(例如,我想测试我的代码的一部分>分配一个数组。我可以让mock假装由于内存不足而导致内存分配失败)

是的,这与上一个问题类似,如果您的代码已经包装了一些内存分配代码,那么您可以模拟包装器返回的内容。也许你有一个内存管理器类型

  

Rhino Mocks是否适合模拟C ++ / CLI应用程序?

不确定这个

  

根据您的经验,任何其他模拟框架(优选免费软件,但对付费框架开放)对此任务有好处吗?

上面链接的示例来自unity + CMock + Ceedling(主要是C测试框架)。它是开源的,对嵌入式C应用程序非常有用。在C ++支持上不确定。

  

这些可以通过MS测试获得吗?

抱歉,不知道这个