инициализация буст-теста для каждого набора (не случай) - PullRequest
4 голосов
/ 14 декабря 2011

Мне нужно инициировать некоторые переменные, которые являются «глобальными» внутри BOOST_AUTO_TEST_SUITE поэтому их конструкторы будут вызываться при запуске набора, а их деструкторы будут вызываться сразу после завершения последнего соответствующего BOOST_AUTO_TEST_CASE

кто-нибудь знает, как я могу это сделать? Похоже, глобальные светильники не является решением ...

Ответы [ 4 ]

4 голосов
/ 09 января 2015

Я не совсем уверен, верен ли принятый ответ, потому что, если я использую тестовый код с веб-сайта Boost :

#define BOOST_TEST_MODULE example
#include <boost/test/included/unit_test.hpp>

struct F {
    F() : i( 0 ) { BOOST_TEST_MESSAGE( "setup fixture" ); }
    ~F()         { BOOST_TEST_MESSAGE( "teardown fixture" ); }

    int i;
};

//____________________________________________________________________________//

BOOST_FIXTURE_TEST_SUITE( s, F )

BOOST_AUTO_TEST_CASE( test_case1 )
{
    BOOST_CHECK( i == 1 );
}

//____________________________________________________________________________//

BOOST_AUTO_TEST_CASE( test_case2 )
{
    BOOST_CHECK_EQUAL( i, 0 );
}

//____________________________________________________________________________//

BOOST_AUTO_TEST_SUITE_END()      

Тогда ожидаемая последовательность вызовов должна быть:

setup fixture
test_case1
test_case2
teardown fixture

Но на самом деле это так:

setup fixture
test_case1
teardown fixture
setup fixture
test_case2
teardown fixture

Я не знаю, является ли это ошибкой, потому что при чтении документации BOOST_FIXTURE_TEST_SUITE я бы ожидал именно первого поведения. Я также могу получить второе поведение, если я использую BOOST_FIXTURE_TEST_CASE.

1 голос
/ 01 апреля 2014

Для дальнейшего использования:

Это было добавлено в библиотеку , по состоянию на 1,36, я считаю.

1 голос
/ 15 декабря 2011

Я не думаю, что это возможно с библиотекой Boost Test.Глобальные фиксации являются действительно глобальными, то есть они создаются для каждого прогона теста, а не для пакета.

Кроме того, я думаю, что такая установка нарушит принципы изоляции теста.Можете ли вы объяснить, почему вам нужны "глобальные" переменные в области действия набора?

0 голосов
/ 12 января 2018

Вы можете использовать глобальные приборы: http://www.boost.org/doc/libs/1_66_0/libs/test/doc/html/boost_test/tests_organization/fixtures/global.html

просто замените

BOOST_FIXTURE_TEST_SUITE( s, F )
BOOST_AUTO_TEST_CASE( test_case1 )
[...]
BOOST_AUTO_TEST_SUITE_END()

на

BOOST_TEST_GLOBAL_FIXTURE( F );
BOOST_AUTO_TEST_CASE( test_case1 )
[...]

Тогда все будет работать так, как вы ожидаете.

- sym39

...