我正在尝试使用谷歌测试为我的 Qt(c++) 应用程序编写一个测试套件,主要问题是我的应用程序由一个主程序和各种共享库组成。一切工作正常,直到我尝试使用 gcov/lcov(它不能在动态库上运行)进行一些代码覆盖,所以我修改了所有 .pro 文件以使用以下方法进行静态库编译:
CONFIG += staticlib create_prl
QMAKE_LFLAGS += -static
LIBS += ../../Libs/lib*.a
问题是谷歌测试测试应用程序是这样的:
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
所以它在运行时检测到链接,这意味着当我在这里编译测试应用程序时没有警告或任何表明问题的东西,并且在运行测试应用程序时它执行 0 test 因为它没有找到任何东西。
我的解决方案(摆脱烦人的)是在每个类中定义将用于测试虚假公共静态成员并对其进行主要测试应用程序的操作:
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();
}
所以我可以在我的应用程序上强制链接该库。
我还发现选项 -u 可以在 gcc 中执行类似的操作,但似乎不起作用。如果在编译时没有检测到符号,有没有人有办法强制静态库链接?