Actuellement, je crée une application serveur pour recevoir des messages spécifiques au protocole. J'ai besoin de créer des tests pour m'assurer que j'ai implémenté le protocole correctement. Est-ce une sorte de test d'intégration? Si positif, puis-je faire un test d'intégration avec des outils de test unitaires? Et enfin, quelle est la meilleure façon de créer ce genre de tests?TDD sur l'application client-serveur
Répondre
Si vous savez ce que les bonnes réponses sont, alors voici ce que je ferais:
séparé la classe responsable de la logique de la manipulation du protocole à partir du code traitant des mécanismes de la connexion. Ecrivez les tests, un à la fois, en spécifiant la réponse correcte pour un ensemble donné de messages d'entrée.
Implémentez ces comportements.
Par exemple, si un message « bonjour » est censé être répondu à un message « Howdy », votre test pourrait ressembler à ceci:
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.
Toute la maquette fait dans ce cas est assert que certains appels ont été faits. Cela peut être fait en roulant des classes pour faire la vérification - il n'y a rien de magique à propos des simulacres, ils facilitent simplement ce type de vérification.
Si vous avez une bibliothèque maquette qui prend en charge Arrangez/Act/Assertion, ce serait ressembler à quelque chose plus comme ceci:
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());
Les interfaces pour les protocoles ne sont pas fortement typé avec les messages , bien sûr. Vous pouvez également faire quelque chose de similaire à ceci:
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"));
(modifier pour clarifier la portée d'essai)
Aucune de ces nécessitent une connexion « réelle ». Ils testent les aspects logiques de la gestion du protocole uniquement, et supposent que vous avez un partage entre la gestion du protocole logique et la gestion de la connexion.
Souhaitez-vous répondre [cette question] (http://stackoverflow.com/q/43309227/2241463)? – Piovezan
Les tests TDD et intégration ne sont pas la même chose. Si vous traversez des frontières de processus (ce qui est très probable dans ce cas), alors oui, c'est un test d'intégration, pas un test unitaire. –
J'ai trouvé ce lien et cela confirme ce que vous venez de dire: http://en.wikipedia.org/wiki/Test-driven_development#Fakes.2C_mocks_and_integration_tests "Ces tests sont complètement distincts des tests unitaires TDD, et sont vraiment des tests d'intégration. (...) Ils peuvent néanmoins être implémentés en utilisant le même framework de test, tel que xUnit. " –
Je ne serais pas accroché à la nomenclature. Faites juste les tests que vous pensez nécessaires. Unités, TDD, intégration, qui s'en soucie. Fais juste les tests. – Tim