Boost logo

Boost Users :

Subject: Re: [Boost-users] [Boost.Test] [1.38] Automated test suie registration with muti-file-test-modules
From: Greg Christopher (gchristopher_at_[hidden])
Date: 2009-06-23 18:03:58


> >
> > Hi,
> > We are starting to expand the number of test modules and are having
> > some growing pains.
> >
> > Originally we were using the "single header" variant
> > included/unit_test.hpp file. Now we have switched
> > to linking to the dynamic version of the boost test library
> > and are including auto_unit_test.hpp.
>
> Just unit_test.hpp is fine. Older name is deprecated.

Ok- hopefully that's true for the version mentioned in the subject line.

>
> > We have been counting on the Test Tools to automatically register
> > suites and test cases. This still worked when we just included
> > unit_test.hpp (instead of included/unit_test.hpp).
> >
> > However with multiple test modules, init_unit_test_suite is being
> > defined in each module.
>
> This should work as you expect. Please post simple example illustrating
> your issues.

Test1.cpp:
-----
#include "stdafx.h"

#define BOOST_TEST_MODULE foo2

#include <boost/test/execution_monitor.hpp>
#include <boost/test/unit_test.hpp>

class DefaultFixture {
public:
    DefaultFixture()
    {
    }
    ~DefaultFixture() {};
};

BOOST_AUTO_TEST_SUITE(foo2)

BOOST_FIXTURE_TEST_CASE(foo2, DefaultFixture)
{
     BOOST_CHECK(4 == 4)
}
-----
Test2.cpp:
-----
#include "stdafx.h"

#define BOOST_TEST_MODULE foo

#include <boost/test/execution_monitor.hpp>
#include <boost/test/unit_test.hpp>

class DefaultFixture {
public:
    DefaultFixture()
    {
    }
    ~DefaultFixture() {};
};
BOOST_AUTO_TEST_SUITE(foo)

BOOST_FIXTURE_TEST_CASE(foo, DefaultFixture)
{
    BOOST_CHECK(4 == 4);
}
BOOST_AUTO_TEST_SUITE_END()
-----
And Link with boost library....

1>TestCase2.obj : error LNK2005: "class boost::unit_test::test_suite * __cdecl init_unit_test_suite(int,char * * const)" (?init_unit_test_suite@@YAPAVtest_suite_at_unit_test_at_boost@@HQAPAD_at_Z) already defined in basic.obj

Googling around, I discovered this cryptic define done in one of the files will fix it:
-----
#define init_unit_test_suite init_auto_unit_test_suite
-----

A strange observation as well....

Take this code:

#include "stdafx.h"

#define BOOST_TEST_MODULE foo

#include <boost/test/execution_monitor.hpp>
#include <boost/test/unit_test.hpp>

class DefaultFixture {
public:
    DefaultFixture()
    {
    }
    ~DefaultFixture() {};
};
BOOST_AUTO_TEST_SUITE(foo)
BOOST_FIXTURE_TEST_CASE(foo, DefaultFixture)
{
    BOOST_CHECK(4 == 4);
}

BOOST_AUTO_TEST_SUITE_END()

And change BOOST_FIXTURE_TEST_CASE toBOOST_TEST_CASE(foo)... it won't compile:

C:\basic\test2.cpp(21) : error C2882: 'foo' : illegal use of namespace identifier in expression
c:\code\main\test\bora-vmsoft\svga\tests\bat\basic\basic\test2.cpp(22) : error C2448: 'boost::unit_test::make_test_case' : function-style initializer appears to be a function definition

-----
    Anyway, thanks for your help. The documentation right now seems to be lacking a little bit in giving clear examples of the different styles in which we are able to do test and suite registration.

Greg


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net