Comment l'unité de tester une méthode qui s'exécute dans une boucle infinie pour une entrée?
Cette question vient de se passer à mon esprit et j'ai envie de demander cela ici.
Le cas est intentionnel, je viens d'écrire une boucle qui s'exécute à l'infini. Comment dois-je aller sur les tests unitaires, il?
Je pose cette question car, cette situation peut se produire n'importe où dans le code. Dire que ma méthode de délégués de plusieurs autres méthodes, et je veux savoir
- Comment il a couru dans une boucle infinie
- Quel ensemble d'entrée causé
- Appel à la méthode (à partir de cette méthode) qui a causé ce
Je n'ai pas de code écrit pour cela. La question est purement pour la connaissance souci pour savoir quoi faire si cette situation se présente dans le futur. S'il vous plaît répondre.
- Est la boucle infinie intentionnelle? Aussi, google "problème de l'arrêt".
- Pourrais-je savoir la raison de celui qui a posé cette question à être fermé, pourquoi le fermer?
- yup, il est intentionnel. Cela vient à mon esprit quand je pensais à une situation où cela peut se produire
- quand est-il censé récupérer le résultat de cette méthode?
- J'ai édité ma question. S'il vous plaît répondre
- pouvez-vous citer un exemple?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez tester la presque opposées: "Comment l'unité de tester une méthode de sorte que la méthode ne fonctionnera pas plus de Xxxx millisecondes pour une entrée". Si ce test échoue, vous pouvez avoir trouvé un candidat avec une boucle infinie.
NUnit 2.5 a une TimeoutAttribute que fait un test échoue si le test prend plus de temps que la durée en millisecondes.
Ont la fonction de boucle, de déléguer la boucle de vérifier à l'injection d'une dépendance:
Vous pouvez tester que les délégués de la boucle de contrôle à l'
IShouldLoop
de la dépendance à chaque fois, et vous pouvez contrôler la boucle dans votre test, de sorte qu'il ne boucle le nombre de fois que vous le souhaitez. Dans l'environnement de production, l'instancier avec une instance deIShouldLoop
qui renvoie toujours vrai.LoopCondition
etisTrue()
plus de sens.J'espère que tu veux dire une sorte de message de la pompe/de gestion des événements de la boucle. (La plupart des boucles infinies sont mauvais).
Je ferais en sorte que la boucle de délégués de classe qui traite les signaux d'entrée. Test de cette classe à fond.
La probabilité d'une boucle de construire ne pas travailler est minime.. Donc je ferais un test par un test d'acceptation ou manuellement.
C'est un peu comme les tests de la fonction Principale d'un exécutable. Le truc c'est aussi de s'assurer que les Principaux délégués à un testable classe.
But de unitesting est de tester chacune d'elles le plus simple appareil dans votre programme.
Plus simple unité est généralement une fonction qui ne une seule mission, afin de unitest votre Boucle infinie, vous aurez pour extraire chaque mission unique cette Boucle pourrait faire dans une séparation de la fonction qui peut être appelée à lui seul, une fois fait cela, vous serez en mesure d'appeler ces fonctions compte tenu de tous les paramètres possibles afin de tester différents szenarios votre fonction doit être capable de gérer. La Boucle infinie comme une fonction ne doit pas être unitested, mais le plus petit des missions à l'intérieur.