Boost logo

Boost :

Subject: Re: [boost] [Boost.Test] access to boost::unit_test::framework::master_test_suite().{argc, argv} outside from BOOST_TEST
From: Olaf Peter (ope-devel_at_[hidden])
Date: 2017-05-08 05:33:56


Am 04.04.2017 um 20:34 schrieb Olaf Peter via Boost:
> Hello Raffi,
>>
>>> my test program uses boost.test datasets. I've wrote a filesystem loader
>>> for the input and expected data. Now I run into the problem, that
>>> boost::unit_test::framework::master_test_suite().{argc, argv} is only
>>> setup inside the tests self. My loader isn't a test case ... I can check
>>> it by using a simple mock, like
>>>
>>> struct app_mock
>>> {
>>> app_mock();
>>>
>>> int const argc;
>>> char** const argv;
>>> };
>>>
>>> app_mock::app_mock()
>>> : argc(boost::unit_test::framework::master_test_suite().argc)
>>> , argv(boost::unit_test::framework::master_test_suite().argv)
>>> { }
>>>
>>> BOOST_AUTO_TEST_CASE( app_mocker )
>>> {
>>> app_mock app;
>>> std::cout << "Count = " << app.argc << '\n';
>>> for(int i = 0; i != app.argc; i++)
>>> std::cout << "Arg = " << app.argv[i] << '\n';
>>> }
>>>
>>>
>>> $ my_test -- my_args
>>>
>>> Count = 2
>>>
>>> path/to/exe
>>>
>>> my_args
>>>
>>>
>>> these works, but as mentioned:
>>>
>>> dataset_loader::dataset_loader(fs::path const& path)
>>> {
>>> app_mock app;
>>>
>>> std::cout << "ARGC = " <<
>>> boost::unit_test::framework::master_test_suite().argc << '\n';
>>> read_files(path);
>>> }
>>>
>>> is always zero.
>>>
>>>
>>> How can I read the argc/argv values?
>>>
>>>
>>> Thanks,
>>>
>>> Olaf
>>
>> The datasets are creating static objects on file scope, that generate
>> the definition of the unit tests.
>>
>> I believe you can achieve what you want here by loading the data from
>> a suite fixture associated to the dataset test case. Otherwise, bring
>> the topic to a trac issue.
> As far I can see, it can't work, since how can I pass arguments to the
> constructor? My use case is
[...]

I like to come back to this problem. Following the docs I can provide an
own main(), as described at
http://www.boost.org/doc/libs/1_64_0/libs/test/doc/html/boost_test/adv_scenarios/static_lib_customizations/entry_point.html.
Here I can hijack argc/argv and use it accessible somewhere statically.
But, how to get the BTU specific argc/argv pruned arguments?

Thanks,
Olaf


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk