Ho una classe che utilizza 'System.Net.Sockets.Socket' direttamente per comunicazione di rete, e attualmente utilizzate le seguenti due interfacce di rompere dipendenza dalla classe Socket:Come simulare correttamente una latenza elevata su un test del server 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();
}
Nell'attuazione I produzione basta reindirizzare tutte le chiamate di metodo all'oggetto Socket privato. Nell'ambiente di test, utilizzo un MemoryStream come "tubo" di comunicazione tra gli zoccoli. Dato che ho poca esperienza in materia, alcune domande mi sono apparse nella testa mentre scrivevo test: ci sono buone pratiche "formali" per testare questo tipo di software? Durante i test di integrazione, come posso testare le prestazioni di questo server in più connessioni/situazioni di latenza elevata (in particolare, come simulare queste situazioni)? Perché esistono versioni asincrone di Socket.Accept/Socket.Receive? Posso sostituire i metodi asincroni per gestire le loro versioni sincrone in thread separati?
Grazie per i suggerimenti, darò un'occhiata al libro. Penso che impostare un'altra macchina solo per fare alcuni test di integrazione sia un po 'eccessivo. Voglio che i test siano veloci e li eseguiamo tutti premendo un pulsante –
Puoi certamente fare i tuoi test dalla stessa casella..ma.. poi condividerai lo stesso stack di rete. Quindi i risultati saranno leggermente distorti. Non è un rompicapo, dovresti solo essere consapevole dei possibili effetti collaterali ... divertiti. – Rusty