Некоторый ввод с клавиатуры использования (тайм-ауты между нажатиями клавиш), я слышал о, я думаю в романе, что радио-статический прием может использоваться - но конечно который требует другого аппаратного и программного обеспечения...
Всякий раз, когда я сталкиваюсь с подобными проблемами с Moq, я в конечном итоге создаю интерфейс, чтобы абстрагироваться от того, что я не могу высмеивать.
Итак, в вашем случае у вас может быть интерфейс ISocket. который реализует метод Send. Тогда пусть ваш фреймворк имитирует это вместо этого.
В вашем фактическом коде у вас будет такой класс
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);
}
}
Не уверен, что это соответствует вашим потребностям, но это вариант.
Причина, по которой вы получаете SocketException при вызове метода Send, заключается в том, что Send не является переопределяемым методом. Чтобы RhinoMocks мог имитировать поведение свойства или метода, он должен быть либо определен в интерфейсе (который мы затем создаем в нашем макете), либо его можно переопределить.
Единственное решение этой проблемы - создать макет класс-оболочка (как предлагает thinkzig).
Лучше создать интерфейс и смоделировать его в своем тесте, а также реализовать в своем коде класс-оболочку, который перенаправляет все вызовы методов в сокет .NET, как сказал Thinkzig. Посмотрите на эту ссылку, это та же проблема: Как вы имитируете файловую систему в C # для модульного тестирования?
Я создал пример консольного приложения, используя метод thinkzig suggests (класс адаптера для Socket). Он использует RhinoMocks и NUnit. Вы можете скачать его здесь: Как насмехаться над System.Net.Sockets.Socket.
.