У меня есть класс, который использует «System.Net.Sockets.Socket» непосредственно для сети коммуникацию, и в настоящее время я использую следующие два интерфейса разорвать зависимость от класса Цоколь:Как правильно смоделировать высокую задержку при тестировании сервера сокетов C#?
public interface ISocketListener
{
void Listen(int backlog);
ISocket Accept();
void Bind(EndPoint endpoint);
}
public interface ISocket
{
void Connect (EndPoint ep);
Stream CommunicationStream { get; }
void Close();
void Close(int timeout);
void Shutdown();
}
В производственной реализации I просто перенаправите все вызовы методов на частный объект Socket. В тестовой среде я использую MemoryStream как коммуникационную «трубу» между сокетами. Поскольку у меня мало опыта в предмете, некоторые вопросы появились у меня в голове при написании тестов: существуют ли какие-либо «формальные» хорошие методы тестирования такого программного обеспечения? При тестировании интеграции, как я могу проверить производительность этого сервера в ситуациях с несколькими соединениями/высокой задержкой (точнее, как имитировать эти ситуации)? Почему существуют асинхронные версии Socket.Accept/Socket.Receive? Могу ли я заменить асинхронные методы обработки своих синхронных версий в отдельных потоках?
Спасибо за советы, я собираюсь взглянуть на книгу. Я думаю, что создание другой машины просто для некоторых интеграционных тестов - это немного излишний. Я хочу, чтобы тесты были быстрыми и запускали их все, нажав кнопку –
. Вы можете, конечно, выполнить свое тестирование в том же окне ... но тогда вы будете использовать один и тот же сетевой стек. Таким образом, ваши результаты будут немного искажены. Это не прерыватель сделки, вы должны просто знать о возможных побочных эффектах ... наслаждаться. – Rusty