如何使用Moq库创建SerialPort模拟?

Pad*_*oti 9 .net c# unit-testing moq mocking

我必须写很多处理串口的代码.通常会在电线的另一端连接一个设备,我通常会创建自己的模拟来模拟它们的行为.

我开始看Moq来帮助我进行单元测试.当你只需要一个存根时,使用它非常简单,但我想知道它是否可行,如果是,我如何为硬件设备创建一个模拟器,根据我想要测试的内容做出不同的响应.

一个简单的例子:

我与之接口的设备之一接收命令(移动到位置x),返回ACK消息并进入"移动"状态,直到它到达有序位置.

我想创建一个测试,我发送移动命令,然后继续查询状态,直到它到达最终位置.

我想为两个不同的测试创建两个版本的模拟,一个是我希望设备成功到达最终位置,另一个是失败.

要问的问题太多了?

Ste*_*ary 5

如果您的程序中有串行端口对象的接口,那么Moq可以通过创建模拟串行端口对象来实现(Moq适用于任何复杂的存根和模拟).

如果您想在到达硬件之前拦截对BCL SerialPort类的调用(无需创建串行端口接口和实现,再加上测试实现),那么您需要更强大的功能.这就是Moles的用途.

如果你想真正模拟一个设备,那么这超出了"单元测试".在此级别,可以使用com0com添加一对虚拟串行端口,并为您的设备编写可与之交谈的模拟器.在这个级别,自动化测试要复杂得多(尽管不是不可能).