J'ai écrit un programme en C#
qui appelle MSTest
à partir de la ligne de commande. L'un des cas de test génère StackOverflowException
et provoque une rupture du processus QtAgent32
(et de mon application). Que puis-je faire pour éviter cette situation (je ne peux pas changer les tests unitaires)?MSTest - test unitaire avec StackOverflowException
Répondre
Une façon d'éviter ce genre de plantage consiste à définir la propriété legacyUnhandledExceptionPolicy dans QTAgent32.exe.config (et/ou QTAgent.exe.config en fonction de la morsure de la machine/testrun) comme mentionné here. Le texte pertinent de ce lien est: -
En tant que mesure de compatibilité temporaire, les administrateurs peuvent placer un indicateur de compatibilité dans la section du fichier de configuration de l'application. Cela provoque l'exécution du Common Language Runtime au comportement des versions 1.0 et 1.1.
Ce basculera le comportement de manutention « exception non gérée » au Net 1.1 et le processus ne plantera pas à ces exceptions.
Merci pour votre réponse. J'étais très utile. – mirt
Le problème est que vous ne pouvez pas attraper StackOverflowException
sur .NET (à partir de la version 2.0). Cela signifie probablement qu'il n'y a aucun moyen de résoudre le problème que vous avez - car le cadre de test unitaire ne peut tout simplement pas détecter l'exception.
Voir la suite connexe SO question:
Il y a quelques suggestions intéressantes sur l'autre fil - par exemple, vous pouvez créer Thread
et vérifier le FrameCount
courant pour détecter plus tôt le débordement de pile. Cependant, cela ne sera probablement pas très fiable. Donc, je crains qu'il n'y ait pas de bonne réponse ...
OK, mais lorsque j'appelle MSTest à partir de la ligne de commande (et non du code C#), lorsque ce test unitaire est en cours d'exécution, je peux simplement cliquer sur Annuler sur le message d'erreur et MSTest continuer à s'exécuter. Je ne sais pas comment faire quelque chose comme ça, mais dans le code C# – mirt
@mirt - pouvez-vous ajouter cette information supplémentaire dans la question originale? Ce sont de bons détails. –
Pouvez-vous partager votre code C#? Idéalement, la même boîte de dialogue devrait apparaître à partir du code C# et je me demande si cela a quelque chose à voir avec les paramètres du processus startInfo? –