gpt4 book ai didi

c++ - 如何模拟库调用?

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:02 24 4
gpt4 key购买 nike

cpp 新手(Java 人员)。

我有第 3 方库,该库具有方法 sendMail(txt)。我不想测试库。我想测试我自己的方法,所以为了做到这一点,我需要模拟库调用。

我自己的方法如下:

#include "mailsender.h"

int run(txt){
analysis(txt);
...
...
int status = sendMail(txt);//sendMail is a 3rd party library call. i need to mock it.its not part of the unit test
return status;
}

在Java中,邮件发送器是接口(interface),它被注入(inject)到我的类中,所以在测试时我注入(inject)模拟。cpp 中模拟库调用的良好做法是什么?我可以将第 3 方库调用包装在一个类中并注入(inject)这个类,但我正在寻找更简单的东西和常见的做法(也许是 ifndf)。

我熟悉googlemock。googlemock 允许我模拟类。我不知道如何选择如何在我的测试方法中模拟调用。

最佳答案

所以我假设您有一个在库中实现的“全局”函数,您都包含一个头文件(以获取定义)和链接(以获取实现)。

您显然需要用您自己的库的实现替换该库的实现 - 一个“不执行任何操作”的库,因此您可以通过两种方式执行此操作:

  • 您可以将 .dll(或 .so)替换为您自己的实现,该实现具有第 3 方库公开的所有方法。一旦您编写了所有第 3 方库函数的新版本,这很容易,但将它们全部写出来可能会很痛苦。
  • 您暂时删除该库,并替换您在实现这些功能的 .cpp 源文件中对该库进行的调用。因此,您可以在 .cpp 文件中创建自己的 sendMail() 函数,并将其包含到程序中,而不是 mailsender.h 包含文件中。

后者更容易,但您可能还需要修改您的程序以不链接到第 3 方库。这也可能需要更改 #include,因为某些编译器(例如 VC++)允许您在源代码中嵌入链接器指令。如果您这样做,那么您将无法阻止链接器包含第 3 方库。

另一个选项是修改您的代码以使用不同的 sendMail 调用,例如您自己实现的 test__sendMail() 。包装这是一个宏,可以根据您的构建选项有条件地包含您的或真实的函数调用。

如果这是一个 C++ 库,那么您可能能够像以前一样使用模拟框架,但听起来它像是一个 C 库,并且它们只是提供了您直接在其中使用的函数列表你的代码。您可以将该库包装在您自己的类中并使用它,而不是直接调用第 3 方库函数。

There is a list of C mocking frameworks.

关于c++ - 如何模拟库调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59842626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com