BOOST_AUTO_TEST_SUITE 内で「グローバル」ないくつかの変数を初期化する必要があるため、スイートの開始時にコンストラクターが呼び出され、最後の対応する BOOST_AUTO_TEST_CASE が終了した直後にデストラクタが呼び出されます。
誰かが私がそれを行う方法を知っていますか? グローバルフィクスチャは解決策ではないようです...
BOOST_AUTO_TEST_SUITE 内で「グローバル」ないくつかの変数を初期化する必要があるため、スイートの開始時にコンストラクターが呼び出され、最後の対応する BOOST_AUTO_TEST_CASE が終了した直後にデストラクタが呼び出されます。
誰かが私がそれを行う方法を知っていますか? グローバルフィクスチャは解決策ではないようです...
受け入れられた答えが正しいかどうかはよくわかりません.boost Webサイトのテストコードを使用すると:
#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
ドキュメントを読むと、最初の動作が正確に予想されるからです。を使用すると、2 番目の動作も取得できますBOOST_FIXTURE_TEST_CASE
。
Boost Test Library では不可能だと思います。グローバル フィクスチャは本当にグローバルです。つまり、スイートごとではなく、テストの実行ごとにインスタンス化されます。
それとは別に、そのようなセットアップはテスト分離の原則に違反すると思います。スイート スコープで「グローバル」変数が必要な理由を説明できますか?