Boost logo

Boost Users :

Subject: Re: [Boost-users] [UTF] Accessing global fixture members within tests
From: Simon Pickles (sipickles_at_[hidden])
Date: 2010-01-02 11:18:24


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 <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
>>
> 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


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