Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2003-02-03 06:24:17


r.lichtenberger_at_[hidden] wrote:

> --- SNIP Example ---
> MyObject* my1 = new MyObject(1, 2, 3);
> BOOST_CHECK_EQUAL(my1->getA(), 1);
> BOOST_CHECK_EQUAL(my1->getB(), 2);
> BOOST_CHECK_EQUAL(my1->getC(), 3);
>
> MyObject* my2 = new MyObject(4, 5, 6);
> BOOST_CHECK_EQUAL(my2->getA(), 4);
> BOOST_CHECK_EQUAL(my2->getB(), 5);
> BOOST_CHECK_EQUAL(my2->getC(), 6);
> --- SNIP ---
>
> can be refactored into:
>
> --- SNIP Example refactored ---
> void checkMyObject(MyObject* my, int a, int b, int c)
> {
> BOOST_CHECK_EQUAL(my->getA(), a);
> BOOST_CHECK_EQUAL(my->getB(), b);
> BOOST_CHECK_EQUAL(my->getC(), c);
> }
>
> MyObject* my1 = new MyObject(1, 2, 3);
> checkMyObject(my1, 1, 2, 3);
> MyObject* my2 = new MyObject(4, 5, 6);
> checkMyObject(my2, 4, 5, 6);
> --- SNIP ---
>
> The problem with the second version is that if the check for equality
> fails, the only output is the line number within checkMyObject() that
> failed. No hint about the calling line is present. Ideally all macros
> should print out a stack trace (as done in e.g. Java), but from my limited
> knowledge of C++ I guess that this is not (easily) possible, so
> introducing a BOOST_CHECK_EQUAL_MESSAGE macro is the second best solution

I've a similiar problem with BOOST_CHECK family, but I think the solution
can be different: provide a means to convert failed test into assertion
failure. This way I can conveniently debug. Currently, I have to
replace BOOST_CHECK with assert manually, to find where the failure happened.
Gennadiy, what do you think?

- Volodya


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk