犀牛嘲笑:如何建立一个假的插座? [英] rhino mocks: how to build a fake socket?

查看:391
本文介绍了犀牛嘲笑:如何建立一个假的插座?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图建立一个假的插座使用下面的代码进行测试:

I tried to build a fake socket for testing using the following code:

var socket = MockRepository.GenerateStub<Socket>(
    AddressFamily.InterNetwork, 
    SocketType.Stream, ProtocolType.IP
);
socket.Stub(v => v.RemoteEndPoint).PropertyBehavior().Return(
    new IPEndPoint(IPAddress.Parse("127.0.0.1"), 12345)
);



但是,要创建为只读属性存根的尝试给了我以下异常:

However, the attempt to create the stub for the read only-property gives me the following exception:

无效的调用,最后调用已被使用或没有已经调用(请确保您调用虚拟(C#)/可重写(VB)方法)。

Invalid call, the last call has been used or no call has been made (make sure that you are calling a virtual (C#) / Overridable (VB) method).

谁能帮我找出到哪里去了?

Could anyone help me spot where it's going wrong?

感谢

推荐答案

THX RUP。

我解决它在我写了一个包装类插槽暴露所有需要的方法作为虚拟的方式。

I solved it in the way that I wrote a wrapper class for Socket that exposed all needed methods as virtual.

public class SocketWrapper
{
    private readonly Socket _socket;

    public SocketWrapper(Socket socket)
    {
        _socket = socket;
    }

    public virtual EndPoint RemoteEndPoint
    {
        get { return _socket.RemoteEndPoint; }
    }

    public virtual void Close()
    {
        _socket.Close();
    }

    public virtual void EndDisconnect(IAsyncResult asyncResult)
    {
        _socket.EndDisconnect(asyncResult);
    }

    public virtual bool Connected
    {
        get { return _socket.Connected; }
    }

    public virtual int Send(byte[] data)
    {
        return _socket.Send(data);
    }

    public virtual IAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags flags, AsyncCallback callback, object state )
    {
        return _socket.BeginReceive(buffer, offset, size, flags, callback, state);
    }

    public virtual int EndReceive(IAsyncResult asyncResutl)
    {
        return _socket.EndReceive(asyncResutl);
    }

    public virtual IAsyncResult BeginDisconnect(bool reuseSocket,AsyncCallback callback, object state)
    {
        return _socket.BeginDisconnect(reuseSocket, callback, state);
    }
}

这篇关于犀牛嘲笑:如何建立一个假的插座?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆