使用Moq实现一个不接受任何参数并返回void的方法

时间:2016-04-28 14:56:27

标签: c# moq void

我是Moq的新手,并且看似简单的问题。

我有两个接口--IClient和IClientFactory,其方法如下所示:

public interface IClientFactory 
{
  IClientHandler Get(TcpClient tcpClient);
}

public interface IClient 
{
  void Run();
}

实现的Run()方法当前打开一个流并发送/接收消息。 我正在尝试测试我的Server类,尤其是Listen方法。 我如何模拟这个以便我的Server类接受客户端并从中接收消息?

这是我的Server类中的代码:

public void Listen(CancellationToken cancellation)
{
    listener.Start(_maxConnections);
    //.... Accept Tcp Client here ....
    var handler = _handlerFactory.Get(client); <--- GET CLIENT HERE
    //.... Start Communication ....
}

1 个答案:

答案 0 :(得分:0)

  1. 创建一个IHandlerClient的模拟,它可以满足您的需求。这完全取决于Listen方法对IHandlerClient所做的事情,你没有展示。

  2. 现在您已经拥有了handlerClientMock,设置了IHandlerFactory模拟,以便其Get方法返回该模拟。

  3. var mock = new Mock();
    mock.Setup(f => f.Get(It.IsAny()))
        .Returns(handlerClientMock.Object);
    
    现在,您可以创建传递IHandlerFactory模拟器的服务器对象。