2010-11-11 44 views
5

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

+0

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? –

Répondre

3

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.

+0

Merci pour votre réponse. J'étais très utile. – mirt

2

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 ...

+0

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

+0

@mirt - pouvez-vous ajouter cette information supplémentaire dans la question originale? Ce sont de bons détails. –