2008-12-03 9 views
4

Je n'ai jamais réussi à passer des tests unitaires aux tests d'intégration de manière gracieuse ou automatisée en ce qui concerne le code réseau.Comment tester l'intégration d'une application réseau en C

Ma question est: Étant donné une simple application de réseau basé client/serveur mono-thread, comment feriez-vous sur l'intégration à la fois client et serveur dans votre suite de tests en favori (j'utilise actuellement check). Je suis bien sûr prêt à changer de suite de tests unitaires pour atteindre mon objectif.

Modifier: Bien que j'apprécie les réponses, j'étais plus à la recherche d'une manière magique d'intégrer les tests d'intégration dans mon cadre de test unitaire (si c'est possible du tout). Comme si fourche() ou quelque chose pourrait être appliqué sans avoir trop d'effets secondaires.

Répondre

0

Nous structurons nos applications pour que le code de base se trouve dans une bibliothèque et que l'exécutable soit généré à partir d'un fichier main.c (vraiment main.cxx dans notre cas) qui est juste un wrapper très fin qui démarre le serveur ou le client. Cela nous permet de configurer des suites de tests qui peuvent instancier un serveur et un client complets dans proc et faire des tests où ils communiquent entre eux en utilisant leur protocole réseau normal. Cela fonctionne plutôt bien.

Si vous ne pouvez pas structurer les choses de cette façon, vous pouvez démarrer votre exécutable serveur habituel en utilisant fork/CreateProcess, puis faire en sorte que le code client dans le test communique avec le serveur externe.

4

Une autre approche consiste à simuler les deux extrémités avec un serveur factice et un client factice qui envoie simplement les messages que vous souhaitez tester et vérifier que les réponses sont conformes aux attentes. Ces serveurs fictifs peuvent être vraiment, vraiment bêtes: ils ont seulement besoin de lire/écrire des sockets et de sauvegarder des données pré-établies. Vous pouvez les modéliser un peu en modélisant les réponses des données dans les requêtes s'il est facile à analyser. La victoire ici est que vous savez exactement ce que l'objet simulé va faire (y compris faux délais, envoyer des ordures, ce que vous voulez).

Il serait probablement très facile d'utiliser une bibliothèque de socket Perl ou Python pour créer vos serveurs et clients fictifs; Si vous utilisez Perl, vous devriez être capable d'utiliser les très performantes classes Test :: du CPAN pour vous aider à faire le vrai "fait ce travail" et à créer des rapports.

1

netcat est un excellent outil pour tester les serveurs réseau et les clients.

man netcat indique que netcat est un couteau suisse TCP/IP. Ayant l'expérience avec les deux netcat et le couteau suisse Victorinox je peux vous assurer que netcat est beaucoup mieux que Victorinox - je préfère le comparer à Leatherman.

Questions connexes