在Qt项目中加入谷歌测试

时间:2018-04-10 14:46:03

标签: c++ qt unit-testing project-structure

我试图用Google测试开始测试我的Qt项目。我读了Qt Docs,但只有描述,如何创建和运行测试,但没有集成。所以我有一些问题。

  1. 我应该创建子项目还是创建单独的子项目?我应该在哪里放置测试项目?
  2. 现在我以这种方式存储测试项目:

    project.pro
    |
     --- subproject1.pri
    |
     --- subproject2.pri
    |
    | ...
    |
     --- test_project.pri
        |
         --- init_tests.cpp
    

    这是放置测试的正确方法吗?

    1. 我应该从哪里运行此代码?
    2. ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();

      现在我从init_tests.cpp运行它。然后我从init_tests函数调用main。这似乎不对,但我不知道另一种方法。

      1. 因此,如果我使用之前描述的方法来集成测试,我该如何从部署中删除它?

      2. 我应该在git repo中放置测试?我为我的测试创建了分支,然后将其合并到master。这是对的吗?

      3. 谢谢你的回答,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

对问题4的回答:对于第一个实现来说似乎是正确的,但是这个分支必须死掉,你不想在测试中有一个分支。在任何分支上进行的提交必须包含相关的单元测试,并且只有在测试为绿色时才必须推送...

对问题1/2的回答:您的测试应该是一个独立的可执行文件,不应该发送到您的客户端。通常,每个可执行目标都有一个专业文件。所以我宁愿这样做:

project.pro
|
 --- subproject1.pri
|
 --- subproject2.pri
|
| ...
|
test_project.pro
 --- test_project.pri
    |
     --- main.cpp

使用main.cpp保存你的行:

:testing::InitGoogleTest(&argc, argv);
 return RUN_ALL_TESTS();
突然间它变得明显,你不觉得吗?

(当然只有test_project.pro包含对Google Test的包含和引用)

对问题3的回答:也变得明显。

注意:为了实现这一点,它假设您在subproject1和subproject2中所做的操作是可访问的,即这些库是静态的,包含在test_project.pro中或包含导出符号的动态库中。