Frage

Jede erfolglose ASSERT-Anweisungen auf Windows verursachen die folgenden Debug-Nachricht, die die Ausführung von Applikationen erscheinen und einfrieren. Ich weiß, das erwartete Verhalten ist, aber es wird in regelmäßigen Abständen auf einer Made Maschine läuft so verhindern, dass die Unit-Tests von Versagen, sondern auf unbestimmte Zeit auf Benutzereingaben wartet.

Gibt es s einen Registrierungsschlüssel oder Compiler-Flag I, während immer noch eine Benutzereingabe das Meldungsfeld zu verhindern, kann von anfordernden so dass der Test unter ASSERT zum Scheitern verurteilt?

Grundsätzlich mag ich, dies zu tun, ohne Code zu modifizieren, nur Compiler oder Windows-Optionen zu ändern.

Danke!

Microsoft Visual C ++ Debug-Bibliothek ASSERT http : //img519.imageshack.us/img519/853/snapshotbu1.png

War es hilfreich?

Lösung

Von MSDN über den ASSERT-Makro:

In einer MFC-ISAPI-Anwendung, eine Behauptung im Debug-Modus wird ein modales Dialogfeld (ASSERT Dialogfelder werden nun standardmäßig modal) bringen; dies wird unterbrechen oder die Ausführung hängen. Zur Unterdrückung modal Behauptung Dialoge, fügen Sie die folgenden Zeilen zu Ihrer Projektquelldatei (ProjectName.cpp):

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

Sobald Sie dies getan haben, können Sie das WebDbg Werkzeug (WebDbg.exe) verwenden, um die Behauptungen zu sehen.

Andere Tipps

Ich denke, das ein Dialog von _CrtDbgReport für Berichte vom Typ _CRT_ASSERT gezeigt ist. Mit _CrtSetReportHook, können Sie dieses Verhalten für die gesamte Anwendung zu. (D erfordert eine lokale Änderung) Insbesondere Sie Ausführung nach gescheiterten Behauptung fortgesetzt werden können, ist es somit ignoriert.

In einem Unit-Test-Kontext ist es oft gut behauptet zu konvertieren (eigentlich _CrtDbgReport Anrufe) in eine Ausnahme, in der Regel eines std :: Ausnahme, dass einiger informativen Text enthält. Dies führt dazu, seinen Weg zu dem Einheit-Test Ausgabeprotokoll als ein nicht bahnen. Das ist genau das, was Sie wollen. Eine nicht bestandene ASSERT sollte eine ausgefallene Einheit Test sein

Sie, dass durch in Ihrer Bericht-Hook-Funktion zu werfen, wie angegeben mit: _CrtSetReportHook()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top