Boost logo

Boost Users :

Subject: [Boost-users] [UTF] Accessing global fixture members within tests
From: Simon Pickles (sipickles_at_[hidden])
Date: 2010-01-02 10:42:38


Hi

I am using the Unit Test Framework to test my use of boost.python. I am
using a global fixture to initialize the python intepreter a single time
(rather than before each test).

My problem is I would like to use the Python initialising class in my
tests, and I can't figure out how to do this. I don't want to use normal
fixtures since each test would call initialize the interpreter, causing
problems.

Here is what I want to do:

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

#include "..//pythonManager//pythonManager.h"

using namespace boost;

// First make a global fixture which sets up python interpreter
struct PythonManagerFixture
{
    PythonManagerFixture()
    {
        pm.Init();
    }
    PythonManager pm;
};

// Set up suite
BOOST_AUTO_TEST_SUITE(TestPythonManager)

// Only init python interpreter once
BOOST_GLOBAL_FIXTURE(PythonManagerFixture);

BOOST_AUTO_TEST_CASE(TestInit)
{
    // Get python globals dict
    python::dict globalDict =
python::extract<python::dict>(pm.m_pyGlobals); // COMPILE ERROR 'pm' :
undeclared identifier
    // Has logging module been imported?
    BOOST_REQUIRE(globalDict.has_key("logging"));
}
 
BOOST_FIXTURE_TEST_CASE(TestLogCallback, PythonManagerFixture) //
RUNTIME ERROR pm.Init called a second time - bad
{
    function<void(const string&, const string&)> f =
pm.GetLogFunction(); // pm is in scope though....
    BOOST_REQUIRE(f);
}

// End the suite
BOOST_AUTO_TEST_SUITE_END()
///////////////////////////////////////////////////////////////////

I need a way to supply the PythonManager instance, pm, to the test cases.

Thanks for any advice

Simon


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