Если вы знаете, каковы правильные ответы, то вот что я бы сделал:
Отделите класс, отвечающий за логику обработки протокола, от кода, касающегося механики соединения.
Запись тестов, по одному, с указанием правильного ответа для данного набора входных сообщений.
Реализуйте это поведение.
Например, если на сообщение «привет» предполагается ответить «привет», ваш тест может выглядеть примерно так:
Mock<IProtocolOut> outbound = new Mock<IProtocolOut>();
MyProtocolHandler handler = new MyProtocolHandler(outbound); // assuming that the handler takes the outbound receiver as a parameter.
outbound.Expect(o=>o.HowdyMessage()); // we expect to get a HowdyMessage back
handler.HelloMessage(); // 'fake' a HelloMessage into the handler
outbound.VerifyAll(); // assert that the 'howdy' message was sent.
Все, что делает в этом случае, - это утверждают, что были сделаны определенные звонки. Это можно сделать с помощью ручных классов, чтобы выполнить проверку - в макетах нет ничего волшебного, они просто упрощают такой тип проверки.
Если у вас есть фиктивная библиотека, которая поддерживает Arrange / Act / Assert, она будет выглядеть примерно так:
Mock<IProtocolOut> outbound = new Mock<IProtocolOut>();
MyProtocolHandler handler = new MyProtocolHandler(outbound); // assuming that the handler takes the outbound receiver as a parameter.
handler.HelloMessage(); // fake the message being sent
outbound.AssertWasCalled(o=>o.HowdyMessage());
Конечно, интерфейсы для протоколов не обязательно должны строго печататься в сообщениях. Вы также можете сделать что-то похожее на это:
Mock<IProtocolOut> outbound = new Mock<IProtocolOut>();
MyProtocolHandler handler = new MyProtocolHandler(outbound); // assuming that the handler takes the outbound receiver as a parameter.
handler..ReceiveMessage("hello"); // fake the message being sent
outbound.AssertWasCalled(o=>o.ReceiveMessage("howdy"));
(изменить для уточнения объема испытаний)
Ни один из них не требует "фактического" соединения. Они проверяют логические аспекты обработки только протокола и предполагают, что вы разбиты между обработкой логического протокола и управлением соединением.