
Hello, I would like to use data test cases. The problem that comes with that, is that I want to use objects that needs the application to be initialized before they are instantiated. Example is that an object that uses MPI needs to habe MPI_Init called before. This example code shows the order in which different hooks are run: #define BOOST_TEST_DYN_LINK // #define BOOST_TEST_MAIN #include <boost/test/unit_test.hpp> #include <boost/test/data/test_case.hpp> #include <boost/test/data/monomorphic.hpp> #include <mpi.h> #include <iostream> #include <string> #include <vector> using namespace std; struct GlobalFixture { GlobalFixture() { cout << "GlobalFixture" << endl; } ~GlobalFixture() { } }; BOOST_GLOBAL_FIXTURE(GlobalFixture); struct Test : public std::string { // derive from string to get operator<< that boost requires Test() { cout << "Object to test" << endl; } }; namespace bdata = boost::unit_test::data; template <class T> class RuntimeDataset { public: using sample = typename T::value_type;; enum { arity = 1 }; T data; explicit RuntimeDataset(T _data) { cout << "Dataset constructor" << endl; data = _data; } bdata::size_t size() const { return data.size(); } typename T::const_iterator begin() const { return data.cbegin(); } }; namespace boost { namespace unit_test { namespace data { namespace monomorphic { template <class T> struct is_dataset<RuntimeDataset<T>> : boost::mpl::true_ {}; }}}} struct Fixture { Fixture() { cout << "Fixture" << endl; } }; BOOST_AUTO_TEST_SUITE(MySuite) BOOST_DATA_TEST_CASE_F( Fixture, test1, RuntimeDataset<std::vector<Test>>( { Test() } ), // This should be evaluated when the test is about to run input) { BOOST_TEST(true); cout << "Data test case" << endl; } BOOST_AUTO_TEST_SUITE_END() // initialization function: bool init_unit_test() { cout << "init_unit_test" << endl; return true; } // entry point: int main(int argc, char* argv[]) { cout << "main" << endl; int retCode = boost::unit_test::unit_test_main( &init_unit_test, argc, argv ); return retCode; } I've removed some code parts, but it should compile right away using mpic++ -std=c++11 -lboost_unit_test_framework boosttesting.cpp Its output is Object to test Dataset constructor main init_unit_test GlobalFixture Running 1 test case... Fixture Data test case *** No errors detected So, before I have any chance to do my own initialization code, the Test object and the dataset is constructed. I have posted this to the user mailing list, but still looking for a way to work around that. Do you have any idea how I can do initialization before data is instantiated? Thanks, Florian