Question

Toute instruction ASSERT ayant échoué sous Windows provoque l'affichage du message de débogage ci-dessous et gèle l'exécution des applications. Je me rends compte que ce comportement est attendu, mais il fonctionne régulièrement sur une machine sans interface utilisateur, évitez donc l'échec des tests unitaires, mais attendez indéfiniment les entrées de l'utilisateur.

Existe-t-il une clé de registre ou un indicateur de compilation que je peux utiliser pour empêcher cette boîte de message de demander une entrée à l'utilisateur tout en laissant le test échouer sous ASSERT?

En gros, je souhaite le faire sans modifier aucun code, mais uniquement en modifiant le compilateur ou les options Windows.

Merci!

Bibliothèque de débogage Microsoft Visual C ++ ASSERT http : //img519.imageshack.us/img519/853/snapshotbu1.png

Était-ce utile?

La solution

À partir de MSDN à propos de la macro ASSERT:

Dans une application ISAPI MFC, une assertion en mode débogage affichera une boîte de dialogue modale (les boîtes de dialogue ASSERT sont maintenant modales par défaut); cela va interrompre ou suspendre l'exécution. Pour supprimer les dialogues d'assertion modale, ajoutez les lignes suivantes au fichier source de votre projet (nomprojet.cpp):

// For custom assert and trace handling with WebDbg
#ifdef _DEBUG
CDebugReportHook g_ReportHook;
#endif

Une fois cette opération effectuée, vous pouvez utiliser l'outil WebDbg (WebDbg.exe) pour afficher les assertions.

Autres conseils

Je pense que ceci est une boîte de dialogue affichée par _CrtDbgReport pour les rapports de type _CRT_ASSERT. Avec _CrtSetReportHook, vous pouvez personnaliser ce comportement pour l'ensemble de votre application. (c’est-à-dire nécessite une modification locale). En particulier, vous pouvez poursuivre l’exécution après une assertion ayant échoué, en l’ignorant.

Dans un contexte de test unitaire, il est souvent utile de convertir les appels ASSERT (en réalité, les appels _CrtDbgReport ) en une exception, généralement un std :: exception, contenant du texte informatif. Cela tend à se retrouver dans le journal de sortie du test unitaire comme un échec. C’est ce que vous voulez: un ASSERT échoué doit être un test unitaire échoué.

Faites cela en ajoutant votre fonction de rapport-hook, comme spécifié à l'aide de: _CrtSetReportHook ()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top