如何使用Moq库创建SerialPort模拟?
我必须编写大量处理串行端口的代码。 通常会有一个设备连接在线的另一端,我通常创建自己的模拟来模拟他们的行为。
我开始看Moq来帮助我的单元测试。 当你需要一个存根时,使用它非常简单,但是我想知道它是否可行,如果是,我该如何为硬件设备创建一个模拟,根据我想要测试的方式进行不同的响应。
一个简单的例子:
我接口的一个设备接收到一个命令(移动到位置x),返回ACK消息并进入“移动”状态,直到达到有序位置。
我想创建一个测试,发送移动命令,然后保持查询状态,直到达到最终位置。
我想为两个不同的测试创建两个模拟版本,一个是我希望设备成功达到最终位置,另一个是失败的地方。
要问的问题太多了?
如果您的程序中有串口对象的接口,那么Moq可以通过创建一个模拟串口对象来实现这一点(Moq适用于任何复杂度的存根和模拟)。
如果您想在BCL SerialPort
类到达硬件(不必创建串行端口接口和实现以及测试实现)之前拦截对BCL SerialPort
类的调用,那么您需要更强大的功能。 这就是鼹鼠的目的。
如果你想真正模拟一个设备,那么这超越了“单元测试”。 在此级别,可以使用com0com添加一对虚拟串行端口并为您的设备编写一个模拟器,以便您的测试可以与之通话。 在这个级别上,测试自动化要复杂得多(虽然不是不可能)。
如果你是TDD模拟,那么你应该让你的测试定义你的对象。 在你编写任何测试之前,它已经听起来像你有一个设计思想。
您的初步设计有:
Timeout
功能 这已经是您的SerialController
必须实现的责任。 哇,这是很多实施没有任何测试。
开始好,简单。
尝试用'最后负责任的时刻'的想法进行测试。
那么你将要使用的语法呢?
你可能想要检查一下:如何测试我自己的小型嵌入式操作系统的可靠性
我给出了Atomic Object的硬件和James Greening博客的链接。 James有一些很好的关于用硬件进行TDD的论文(不介意ruby,c和c ++的东西,如果你在做硬件,那么你之前已经用过c和c ++))。
顺便说一句,它看起来很令人兴奋,你在做什么。
链接地址: http://www.djcxy.com/p/46131.html上一篇: How can I create a SerialPort mock using the Moq library?