使用Google Mock缩短构建时间

时间:2016-01-31 01:55:43

标签: c++ googletest googlemock

我正在寻找使用googletest来改善构建时间的策略,我想知道我看到的是典型的,是否有可以避免的特定功能以缩短构建时间,或者我只是做某事错。

我已经看到了这个post,但现在已经大约2岁了。

我一直在使用一个中等简单的测试夹具进行分析,该测试夹具有24个测试并使用以下googlemock功能。我为此无法提供完整的示例而道歉,但显然对于一些简单的例子,构建时间可以忽略不计。如果您对此主题有经验并有预感,我当然可以根据要求填写更多详细信息。总的来说,构建大约有37个文件,包括googletest来源。

using ::testing::_;
using ::testing::AnyNumber;
using ::testing::DoAll;
using ::testing::Exactly;
using ::testing::InSequence;
using ::testing::Mock;
using ::testing::NiceMock;
using ::testing::Return;
using ::testing::SetArgReferee;

我使用cmake和ninja使用clang 3.7.0和mingw64-g ++ 5.3.0构建了我的示例。见下面的时间。完整构建是项目中所有源所需的时间,包括googletest。编译+链接是构建单个测试夹具源和链接所需的时间。链接是创建测试可执行文件的时候了。我尝试了元组标志,但正如你所看到的,这并没有太大的区别。

随着时间的推移,他们提出了一些挑战,以保持修复/构建/测试周期快速。有趣的是,配置产生了如此巨大的差异,并且Release比Debug更快。我希望发布会花更多时间进行优化。

GTEST_USE_OWN_TR1_TUPLE=1
Compiler | Config  | Full     | Compile+Link | Link
clang    | Debug   | 29.975s  | 16.166s      | 10.046s
clang    | Release | 29.621s  | 13.317s      | 0.972s
mingw64  | Debug   | 1m6.751s | 39.590s      | 22.923s
mingw64  | Release | 44.287s  | 15.075s      | 1.031s

GTEST_USE_OWN_TR1_TUPLE=0
Compiler | Config  | Full     | Compile+Link | Link
clang    | Debug   | 28.565s  | 15.815s      | 9.545s
clang    | Release | 28.354s  | 12.955s      | 1.075s
mingw64  | Debug   | 1m7.954s | 37.611s      | 24.304s
mingw64  | Release | 42.615s  | 15.329s      | 0.895s

进一步剖析发布clang构建的构建时间

#include <gmock/gmock.h>     ~ 2s
Instantiating 11 mocks       ~ 9s
24 test cases                ~ 1s

修改

我按照cookbook - Making Compilation Faster中的建议,这有很多帮助。我还与版本1.6.0进行了比较。我不知道关于速度足够快(0秒,-2秒,时间旅行?)的共识是什么。 Sub 10秒我开始感觉是可以忍受的,5秒肯定是首选。理想情况下,我想将此示例推到1秒,但也许这是不可能的。鉴于它是一个相当简单的例子,我的预感是事情不会在规模之下,但也许这不是真的。

googlemock 1.7+ ddb8012
GTEST_USE_OWN_TR1_TUPLE=0
Compiler | Config  | Full     | Compile+Link | Link
clang    | Debug   | 31.151s  | 7.572s      | 4.567s
clang    | Release | 39.806s  | 4.742s      | 0.689s

googlemock 1.6
GTEST_USE_OWN_TR1_TUPLE=0
Compiler | Config  | Full     | Compile+Link | Link
clang    | Debug   | 26.551s  | 5.104s      | 3.218s
clang    | Release | 28.932s  | 3.777s      | 0.676s

0 个答案:

没有答案