|
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