Boost logo

Boost Users :

From: Bill Lear (rael_at_[hidden])
Date: 2005-01-28 17:23:57

I am having trouble working around a problem with inheriting unit
test cases.

Suppose I have a base class Foo and several derived classes. Suppose
I have a corresponding base test case and I would like to reuse that
base test case with test cases for the derived classes.

What I would like to do is this, in highly stylized form:

class BaseFooTestCase {
    virtual Foo* create() = 0;

    void test_base() {
        Foo* foo = create();
        // test foo ...

    void add(test_suite* ts) {
        ts->add(BOOST_CLASS_TEST_CASE(&BaseFooTestCase::test_base, this);

class DerivedFooTestCase {
    virtual Foo* create() { return new Derived(); }

    void test_derived() {
        Foo* foo = create();
        // test foo

    void add(test_suite* ts) {
        ts->add(BOOST_CLASS_TEST_CASE(&DerivedFooTestCase::test_derived, this);

Then, something like this:

test_suite* init_unit_test_suite(int, char* []) {
    auto_ptr<test_suite> ts(new test_suite("test"));

    DerivedFooTestCase* tc = new DeriveFooTestCase();


    return ts;

However, I can't get the add() methods in the test case classes worked
out. The BOOST_CLASS_TEST_CASE macro seems to want a shared_ptr,
and passing "this" to it does not seem to work.

Could anyone please provide an example of how to do this?

Every time I try to work this out, I end up with a mess --- static
allocator methods, weak_ptr wrapped by shared_ptr, and other
workarounds --- all of which works, but is really quite a lot of
effort for what I want and is overly complex for me to recommend to my
team as a solution.

Any help appreciated.



Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at