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
#include
#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::extractpython::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 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