如何测试套接字异常处理代码?

时间:2010-01-08 16:20:24

标签: c# .net unit-testing exception

我有以下代码:

try
{
  mainSocket = new Socket(AddressFamily.InterNetwork, 
    SocketType.Stream, ProtocolType.Tcp);
  IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, serverPort);
  mainSocket.Bind(ipEndPoint);
  mainSocket.Listen(MAX_CONNECTIONS);
  mainSocket.BeginAccept(new AsyncCallback(serverEndAccept), mainSocket);
  OnNetworkEvents eventArgs = 
    new OnNetworkEvents(true, "Listening for Connection");
  OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (SocketException e)
{
  // add code here
}
catch (ObjectDisposedException e)
{
  // add code here
}

如果服务器一直在成功收听,我如何测试代码的SocketException

4 个答案:

答案 0 :(得分:8)

请勿针对实时网络进行测试。模拟套接字并针对抛出SocketException的模拟进行测试。

答案 1 :(得分:3)

你可以添加这样的东西进行测试:

#if (UNITTEST)

  throw new SocketException();
#endif

然后在你的单元测试编译中定义该变量。

否则做一些强制异常的事情。就像有一个无效的配置设置,它不会让它连接用于你的单元测试代码。

答案 2 :(得分:3)

拔下网络电缆或关闭无线网络(假设您正在测试远程服务器)。

答案 3 :(得分:2)

从try块中手动抛出SocketException

throw new SocketException("Testing");