2016-08-05 24 views
1

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

+0

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

+0

@ πάνταῥεῖ 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

+0

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

Antwort

1

Es scheint, dass Sie ein Newline-Symbol nach false berücksichtigen müssen, verwenden Sie false\n.

Wenn Sie false am Ende von beiden Zeilen und Zeichenfolgen verwenden müssen, verwenden Sie ($|\n).