6

私の C++ アプリケーションには、スタンドアロン プログラム用のさまざまなシェルベースの統合テストと、アプリの API 用のソース コード単体テストがあります。テストは、テスト ドライバーとログ パーサーが付属make checkする Autotools (autoconf、automake) によって生成されたターゲットを介して実行されます。単体テスト スイートの管理を改善するために、Boost Unit Test Framework の採用を開始しました。ターゲットの下で受け入れテストと単体テストの両方を (ブースト UTF テストと標準 TAP テストの両方を使用して) 実行する方法はありますか?make check

Makefile.amは次のように見えます:

check_PROGRAMS = test1 test2
SOURCES = test1.cpp test2.cpp
CC = g++
TESTS = $(check_PROGRAMS) standalone1.test standalone2.test
LDADD = -lboost_unit_test_framework
TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
    $(top_srcdir)/test/tap-driver.sh
EXTRA_DIST = $(TESTS)

Boost UTF テスト スイートは次のようになります。

#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "My Unit Tests"

#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(MyTestSuite1);
    BOOST_AUTO_TEST_CASE(MyTestCase1) {
        BOOST_CHECK(true);
    }
BOOST_AUTO_TEST_SUITE_END();
4

2 に答える 2

2

私のようにboost-m4を使用している場合は、次を試すことができます。

./configure.ac:

BOOST_REQUIRE([1.61])
BOOST_SYSTEM
BOOST_TEST

./test/Makefile.am (AM_CPPFLAGS、AM_LDFLAGS、および LDADD を追加)

AM_CPPFLAGS = $(BOOST_CPPFLAGS) -DBOOST_TEST_DYN_LINK
AM_LDFLAGS = $(BOOST_LDFLAGS) $(BOOST_SYSTEM_LDFLAGS) $(BOOST_UNIT_TEST_FRAMEWORK_LDFLAGS)
LDADD = $(BOOST_SYSTEM_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIBS)

check_PROGRAMS = test1 test2
SOURCES = test1.cpp test2.cpp
CC = g++
TESTS = $(check_PROGRAMS) standalone1.test standalone2.test
EXTRA_DIST = $(TESTS)

これは、'-lboost_unit_test_framework' を Makefile.am 内に直接配置するよりも洗練されているようです。上記のように、'#define BOOST_TEST_DYN_LINK' を cpp から Makefile.am の AM_CPPFLAGS に移動することも検討してください。

詳細については、boost-m4 README を参照してください。

于 2016-08-11T08:46:45.310 に答える
1

これに対処する標準的な方法は、bin プライマリを使用せず、TEST プライマリを使用することです。あなたの場合、 Makefile.am は次のようになります。

 LDADD = -lboost_unit_test_framework

 TESTS = standalone1 standalone2 
 standalone1_SOURCES = test1.cpp standalone1.test
 standalone2_SOURCES = test2.cpp standalone2.test

TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
                  $(top_srcdir)/test/tap-driver.sh
EXTRA_DIST = $(TESTS)

詳細については、この回答を確認してください

于 2015-04-14T04:59:27.430 に答える