4

Linuxで単体テスト(ブースト)をコンパイルしようとしていますが、コンパイラーがエラーを起こします。誰かが私のコマンドをチェックできますか?

g++ -o UTest ../UTest/UT1.cpp ../UTest/UT2.cpp -lboost_system -lboost_thread -lboost_unit_test_framework 

エラー

/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'

main()使用時に使用すべきではないため、g++comandから削除しましたboost unit test

どうしたの?

PSユニットテストなしのプロジェクト(ありmain())は正常にコンパイルされます。Windowsでの単体テストも正常に機能します。

アップデート

の問題main()は解決されました。しかし、新しいものが生まれました。

UT1.cppUT2.cppが含まれてUTCommon.hいますが、今は次のようなエラーがたくさんあります

エラー

tmp2.cpp:(.text+0xd44a): multiple definition of `boost::unit_test::unit_test_log_t::operator<<(boost::unit_test::lazy_ostream const&)'
/tmp/cc0jw8uR.o:tmp.cpp:(.text+0xd44a): first defined here
/tmp/cctLn9QJ.o: In function `boost::test_tools::tt_detail::equal_impl(char const*, char const*)'

UTCommon.h

#ifndef UT_COMMON_H
#define UT_COMMON_H

#ifndef BOOST_TEST_MODULE
#define BOOST_TEST_MODULE UnitTest
#endif

#if defined (__GNUC__) && defined(__unix__)
    #include <boost/test/included/unit_test.hpp>
#elif defined (WIN32)
    #include <boost/test/unit_test.hpp>
#endif

#endif
4

1 に答える 1

6

ファイルを含む別の.cppファイルを作成することをお勧めしますboost/test/included/unit_test.hpp。これには、事前に生成されたmain()関数がコードに含まれます。その後、実際のテストにマクロを使用できBOOST_AUTO_TEST_CASEます(何度でも)。

#define BOOST_TEST_DYN_LINK        // this is optional
#define BOOST_TEST_MODULE MyTest   // specify the name of your test module
#include <boost/test/included/unit_test.hpp>  // include this to get main()


BOOST_AUTO_TEST_CASE(my_test_1)    // specify a test case
{
  /* Test something... */
  const static auto expected = 12;
  auto actual = my_func();

  BOOST_CHECK(actual == expected);
}

この.cppファイルをコンパイルし(独自のコードで定義されているすべての関数に必要に応じてリンカーオプションを追加します)、すべてのテストを実行してレポートを生成する実行可能ファイルになります。

于 2012-11-25T02:56:29.770 に答える