2017-10-22 1 views
0

Google Test Assertions ASSERT_* sollen in Form von ASSERT_EQ(expected, actual) verwendet werden, wobei der 1. Parameter ist erwarteter Wert und der 2. ist der tatsächliche Wert. Aber sehr oft sehe ich in den bestehenden Code-Basis, dass diese Parameter wie in diesem Code umgekehrt werden:Wie erzwinge die richtige Reihenfolge von erwarteten und tatsächlichen in Google Test?

TEST(test, test) 
{ 
    ASSERT_EQ(foo(), 1);  
} 

Das ist fast in Ordnung, aber es erzeugt ein bisschen komisch Fehlermeldung bei Testfehler wie: „das Ergebnis der foo() wurde erwartet, aber eigentlich war es 1 ". Dies scheint ein kleines Problem zu sein, aber gibt es eine Möglichkeit, die richtige Reihenfolge von erwartetem und tatsächlichem zur Kompilierungszeit zu erzwingen?

+0

AFAIK - es ist kein Fall für eine neuere Version von Google-Test. Ich meine - in neueren Versionen - keine dieser Seiten wird als nur erwartet oder nur tatsächlich behandelt. Aktualisieren Sie einfach Ihre Google-Testversion. – PiotrNycz

Antwort

1

können Sie verwenden hamcrest von Google Mock-Matcher:

ASSERT_THAT(foo(), Eq(1)); 

Diese verbessern die Lesbarkeit und Kraft, um von Parametern.

+0

Danke, 'ASSERT_THAT (Eq (1), foo());' kann nicht kompiliert werden. – ks1322

0

sind hier zwei Möglichkeiten:

  1. Sind Ihre erwartete Werte nur Literale? Wenn ja, können Sie dann Ihr eigenes Makro schreiben, das überprüft, ob der erwartete Wert ein Literal ist. Siehe this question für Ideen, wie man das macht.

  2. Einführung einer Namenskonvention. Lassen Sie alle im Team erwartete Werte in eine Variable namens expected_Foo. Fügen Sie ein neues Makro wie folgt:

#define MyAssertion(expectedVal, actual) ASSERT_EQ(expected_##expectedVal, actual) auto expectedFoo = foo(); MyAssertion(Foo, 1);

Verwandte Themen