2010-01-20 11 views
1

Je voudrais écrire une méthode dans ma suite de test comme suit:erreur de test unité boost C du message

void checkParams(arg1, arg2, arg3) 
{ 
BOOST_REQUIRE(arg1==1); 
BOOST_REQUIRE(arg2==2); 
BOOST_REQUIRE(arg3==3); 

} 

Cependant, je veux écrire quelque chose à stderr si l'assertion échoue. Par exemple, si le premier assert échoue, je veux écrire: checkParams a échoué avec des arguments arg1 = 5, arg2 = 4, arg3 = 3

Écrire maintenant le message qu'il génère est juste que l'enregistrement critique n'a pas 5 == 1.

Plus généralement, je voudrais créer un stacktrace en cas d'échec afin que je puisse voir une chaîne des appels qui ont conduit à cet échec. Notez que cette méthode est appelée par toutes mes méthodes BOOST_AUTO_TEST_CASE mais n'est pas elle-même une BOOST_AUTO_TEST_CASE.

Comment faire?

Une autre question: Je sais que je peux modifier le niveau de journalisation en fournissant des paramètres de temps d'exécution,

./test --log_level=all 

Comment régler le log_level du code?

Répondre

2

Vous voulez BOOST_REQUIRE_MESSAGE.

Vous aussi probablement envie de fusionner les en un seul chèque:

BOOST_REQUIRE_MESSAGE((arg1 == 1) && (arg2 == 2) && (arg3 = 3), 
    "failed with arg1=" << arg1 << " arg2=" << arg2 << " arg3= " << arg3); 
+0

Boost 1,40 ne semble pas me permettre de placer un BOOST_MESSAGE comme second paramètre (seulement une chaîne littérale). – user231536

+0

Oups, placez BOOST_MESSAGE lorsque cela n'était pas nécessaire. Mise à jour de la réponse avec la bonne version –

2

J'utiliser BOOST_CHECK ou BOOST_CHECK_EQUAL avant la BOOST_REQUIRE. BOOST_CHECK signale simplement l'erreur et continue, donc le test échoue, mais vous obtenez de voir toutes les mauvaises valeurs.

Si vous voulez forcer l'arrêt du test, utilisez BOOST_REQUIRE par la suite.

void checkParams(arg1, arg2, arg3) 
{ 
    BOOST_CHECK_EQUAL(1, arg1); 
    BOOST_CHECK_EQUAL(2, arg2); 
    BOOST_CHECK_EQUAL(3, arg3); 

    BOOST_REQUIRE(arg1==1 && arg2==2 && arg3==3); 
}