.net 假装与TCP客户端和套接字连接缓慢

.net 假装与TCP客户端和套接字连接缓慢,.net,sockets,tcp,integration-testing,.net,Sockets,Tcp,Integration Testing,我正在尝试编写一个集成测试,以证明如果尝试连接到服务器的速度太慢,TCP客户端将正确超时。我有一个FakeServer类,它打开一个Socket并侦听传入的连接: public sealed class FakeServer : IDisposable { ... public TimeSpan ConnectDelay { get; set; } public void Start() { this.Creat

我正在尝试编写一个集成测试,以证明如果尝试连接到服务器的速度太慢,TCP客户端将正确超时。我有一个
FakeServer
类,它打开一个
Socket
并侦听传入的连接:

public sealed class FakeServer : IDisposable
{
    ...

    public TimeSpan ConnectDelay
    {
        get; set;
    }

    public void Start()
    {
        this.CreateSocket();
        this.socket.Listen(int.MaxValue);

        this.socket.BeginAccept(this.OnSocketAccepted, null);
    }

    private void CreateSocket()
    {
        var ip = new IPAddress(new byte[] { 0, 0, 0, 0 });
        var endPoint = new IPEndPoint(ip, Port);
        this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        this.socket.Bind(endPoint);
    }

    private void OnSocketAccepted(IAsyncResult asyncResult)
    {
        Thread.Sleep(this.connectDelay);
        this.clientSocket = this.socket.EndAccept(asyncResult);
    }
}
请注意,我试图通过调用
Thread.Sleep()
来延迟连接的成功。不幸的是,这不起作用:

[Fact]
public void tcp_client_test()
{
    this.fakeServer.ConnectDelay = TimeSpan.FromSeconds(20);
    var tcpClient = new TcpClient();
    tcpClient.Connect("localhost", FakeServer.Port);
}
在上面的测试中,对
tcpClient.Connect()
的调用立即成功,甚至在调用服务器端
OnSocketAccepted
方法之前。我已经看过了API,我看不到任何明显的方法来注入一些服务器端逻辑,这些逻辑必须在建立客户端连接之前完成


有没有什么方法可以让我使用
TcpClient
Socket
来伪造一个缓慢的服务器/连接?

visualstudio附带了网络仿真器()

+1来实际测试错误/缓慢的连接,这与其他无知的世界不同:)你可以使用像netlimitor这样的工具来限制连接。不幸的是,这不是免费的。SO/SE网络上有很多问题涉及到这个主题。许多是特定于浏览器或特定操作系统的(OSX至少有2个),但是,应该有您可以使用的解决方案。这里也有一些通用解决方案:我不追求网络工具,因为这是作为集成测试运行的。