有没有人在.NET中成功模拟过Socket类?

Nos*_*ama 9 c# nunit rhino-mocks mocking nunit-mocks

我试图在C#中模拟出System.net.Sockets.Socket类 - 我尝试使用NUnit模拟但它不能模拟具体的类.我也尝试过使用Rhino Mocks,但它似乎使用了该类的真实版本,因为它在调用Send(byte [])时抛出了SocketException.有没有人使用任何模拟框架成功创建和使用Socket模拟?

Jam*_*nes 14

每当我遇到Moq的这些问题时,我最终都会创建一个接口来抽象出我无法模拟的东西.

因此,在您的实例中,您可能有一个实现Send方法的ISocket接口.然后让你的模拟框架模拟而不是.

在您的实际代码中,您将拥有这样的类

public class MySocket : ISocket
{
  System.Net.Sockets.Socket _socket;

  public void MySocket(System.Net.Sockets.Socket theSocket)
  {
    _socket = theSocket;
  }

  public virtual void Send(byte[] stuffToSend)
  {
    _socket.Send(stuffToSend);
  }

}
Run Code Online (Sandbox Code Playgroud)

不确定这是否符合您的需求,但这是一个选择.

  • 但不要止步于此.不要只是回显外部API,而是编写一个接口来描述代码从通信层获得的内容.这可能意味着它接受更多结构化输入,而不是字节.或者别的什么,它取决于上下文. (4认同)
  • 但是,如果你使这个界面更复杂,你需要对它进行单元测试,这意味着需要再次模拟内部组件......有点挫败了目的. (3认同)