我必须编写大量处理串行端口的代码。通常,电线的另一端会连接一个设备,我通常会创建自己的模拟来模拟它们的行为。
我开始考虑 Moq 来帮助我进行单元测试。当您只需要一个存根时,使用它非常简单,但我想知道是否可能,如果可以,如何为硬件设备创建一个模拟,该模拟根据我想要测试的内容做出不同的响应。
一个简单的例子:
我连接的设备之一接收命令(移动到位置 x),返回 ACK 消息并进入“移动”状态,直到到达指定位置。
我想创建一个测试,在其中发送移动命令,然后继续查询状态,直到到达最终位置。
我想为两个不同的测试创建两个版本的模拟,一个是我希望设备成功到达最终位置,另一个是失败。
要问的问题太多了?
如果您的程序中有串行端口对象的接口,那么 Moq 可以通过创建模拟串行端口对象来实现这一点(Moq 对于任何复杂性的存根和模拟都有好处)。
如果你愿意截距呼叫 BCLSerialPort
在它们到达硬件之前类(无需创建串行端口接口和实现,以及测试实现),那么您需要更强大的东西。就是这样Moles http://research.microsoft.com/en-us/projects/moles/ is for.
如果您想实际模拟设备,那么这超出了“单元测试”的范围。在此级别,可以使用com0com http://com0com.sourceforge.net/添加一对虚拟串行端口并为您的设备编写一个模拟器,以便您的测试可以与之对话。在这个级别,自动化测试要复杂得多(尽管并非不可能)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)