是否可以在不使用gmock修改源代码的情况下模拟系统调用(例如:malloc)?

问题描述 投票:0回答:1

我想模拟系统调用,例如malloc / file-open,以对我的代码进行单元测试,而无需修改生产代码。同样,在源代码中为这些系统调用创建包装器也是不可行的,因此排除了该选项。

任何输入/解决方案会有所帮助。

unit-testing malloc system-calls googletest gmock
1个回答
0
投票

模拟系统调用是有问题的,因为gtest和gmock本身也使用相同的功能。并且,由于也不用将它们包装在源代码中,因此可能没有太多的可能性。

您可以尝试的一件事是在编译源代码文件时使用预处理器替换这些调用。它不符合标准,但通常可以使用。假设您需要测试的代码在文件foo.cpp中。该文件foo.cpp包括a.hb.h,并且对于malloc,包括<cstdlib>

[您想要做的是#define malloc malloc_mock,但要使其生效(至少有可能-就像我说的那样,它是不合规的黑客行为),您必须按照以下方式在文件[C0中]:

foo_test.cpp

丑吗?当然。但是,限制来自您,因此不要索要漂亮的东西。

© www.soinside.com 2019 - 2024. All rights reserved.