Verwenden von Google Test für einen Komponententest eines Assert-Wrappers, der optional __FILE__
und __LINE__
Informationen in die Fehlermeldung enthalten kann.Übereinstimmendes Zeilenende in Google Tests ASSERT_DEATH-Regex
void My_Assert (bool test)
{
#if USE_FILE_MACRO
std::cerr << "fatal error: false in file __FILE__ at line __LINE__\n"
#else
std::cerr << "fatal error: false\n"
#endif
throw std::runtime_error ("Fatal error");
}
Ich möchte für diesen Test, um sicherzustellen, dass die Datei und Linie sind nicht enthalten, so möchte ich nur ASSERT_DEATH
auf „fatale Fehler: false“ entsprechen, nicht „schwerwiegender Fehler: false in der Datei my_file. cpp bei Linie 42 ". Dies ist, was mit Ich beginne:
ASSERT_DEATH(try {My_Assert (false);} catch (...){exit(1);}, "fatal error: false");
habe ich versucht, ein Dollarzeichen hinzugefügt das Ende der Zeile passen, aber das stimmt nicht auf „fatale Fehler: false“. Ich habe verschiedene Varianten von \s
, [:space:]
ohne Glück versucht. Ich kann das Dokument missverstehen, und ein Dollar-Zeichen stimmt nicht überein Ende der Zeile in gtest Regex: Ich kann nicht sagen, ob die Anweisung "entspricht das Ende einer Zeichenfolge (nicht die jeder Zeile)" in der advanced guide here gilt nur auf Windows Regex oder alle Systeme. Ich kompiliere für OSX mit LLVM Version 7.3.0 (clang-703.0.31).
Nicht genug Informationen gegeben leider. 1. Stellen Sie eine [MCVE] bereit. 2. Geben Sie einige Details zu Ihrer Zielplattform und der verwendeten Compiler-Version an. Verbessere deine Frage bitte! BTW, tut der Prozess _crash_ mit einem Nicht-Null-Ausgangswert an 1. Stelle? –
@ πάνταῥεῖ Die Frage wurde mit weiteren Informationen aktualisiert. Die zu testende Funktion (My_Assert) stürzt nicht ab - sie meldet sich nur bei stderr an und löst eine Ausnahme aus. – kslattery
'ASSERT_DEATH()' erwartet, dass Ihr Programm mit einem Exit-Code ungleich Null an erster Stelle beendet wird, bevor die Regex tatsächlich überprüft wird. Du benutzt es wahrscheinlich falsch. –