如何为依赖于SerialPort的类编写单元测试?

9 c# unit-testing mocking

我知道简短的回答是Mocks,但任何例子都会很好.我需要能够测试以下内容:

  1. 连接/断开
  2. 按设定的间隔接收数据
  3. 暂停数据传输,导致我的类尝试重新连接
  4. 测试事件在预期时触发.

作为一个开始,我正在考虑定义一个接口,它将使用一个流,这将允许我简单地让我的类连接到任何流,我可以控制比串行端口更好,并允许我这样做programmaticly.如果有人有更好的想法,我会非常感激.

Dav*_*iff 5

听起来您想执行集成测试而不是单元测试?

如果您指的是单元测试,您可以:

  1. 围绕串行端口创建一个包装器
  2. 给包装器一个接口,也许是 IPort
  3. 将其传递到需要串行端口的类中
  4. 模拟传入的 SerialPost

internal interface IPort
{
   void Connect(); 
   //Other members
}

internal class SerialPort : IPort
{
   public void Connect() 
   {
      //Implementation
   }
}

public class DataRetriever
{
   private IPort _port;
   public DataRetriever(IPort port)
   {
       _port = port;
   }

   public void ReadData()
   {
      _port.Connect();
   }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以测试数据检索器类。不幸的是,当您接近框架(例如 SerialPort 包装器)时,您无法对其进行单元测试。您需要将其留给集成测试。


Khu*_*ziz 3

http://en.wikipedia.org/wiki/COM_port_redirector列出了一些免费/开源虚拟 COM 端口驱动程序/重定向器,这对您的测试很有帮助!