Google テストを使用して Qt(c++) アプリケーションのテスト スーツを作成しようとしています。主な問題は、アプリケーションが 1 つのメイン プログラムとさまざまな共有ライブラリで構成されていることです。gcov/lcov (動的ライブラリでは動作しません) を使用してコード カバレッジを実行しようとするまで、すべてが正常に機能していたので、すべての .pro ファイルを変更して、次を使用して静的 lib コンパイルを行いました。
CONFIG += staticlib create_prl
QMAKE_LFLAGS += -static
LIBS += ../../Libs/lib*.a
問題は、Google テスト テスト アプリケーションが次のようなものであることです。
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
したがって、実行時にリンケージを検出します。つまり、ここでテストアプリケーションをコンパイルすると、警告や問題を示すものは何も表示されず、テストアプリケーションを実行すると、何も見つからないため 0 テストが実行されます。
私の解決策(迷惑なものをやめる)は、偽のパブリック静的メンバーのテストに使用される各クラスで定義し、その上でメインのテストアプリケーションの操作を行うことです:
class SETTINGS_TESTS_SHARED_EXPORT SettingsTests: public testing::Test {
public:
SettingsTests();
virtual ~SettingsTests();
static bool dummy;
protected:
virtual void SetUp();
virtual void TearDown();
private:
Settings* _setting0;
Settings* _setting1;
Settings* _setting2;
};
using namespace MBI::SETTINGS;
using namespace MBI::TESTS;
int main(int argc, char **argv) {
SettingsTests::dummy = true;
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
そのため、アプリケーションでそのライブラリのリンクを強制できます。
また、gcc でそのようなことを行うオプション -u を見つけましたが、機能していないようです。コンパイル時にシンボルが検出されない場合、静的ライブラリのリンクを強制する方法を誰かが持っていますか?