
Simon Pickles wrote:
Simon Pickles wrote:
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
Ah, I needed the subtle distinction of a BOOST_FIXTURE_TEST_SUITE, not a BOOST_FIXTURE_TEST_CASE
Alas, I am mistaken. BOOST_FIXTURE_TEST_SUITE is simply a convenience macro, removing the need to add a fixture to each test case. What I need is a way to perform the fixture setup ONCE, yet allow test cases access to the public members