使用 C 函数时如何测试 C++ 代码

How to test C++ code when using C functions

我写了一个c++class,这个class使用了第三方写的c函数库

extern "C" {
#include "nats/nats.h"
}

class NatsConnection {
  public:
  void Connect() {
    natsConnection_Connect(&natsConnection_, natsOptions_);
    natsConnection_SubscribeSync(&natsSubscription_, natsConnection_,
                                 configuration_.subject.c_str());
    // some other c++ code.
  }
}

上面的class使用了从c导入的函数:natsConnection_Connect, natsConnection_SubscribeSync.

现在我需要写一个单元测试来覆盖some other c++ code,我正在使用gtest,我知道如何模拟C++ class,但是一旦我使用了C代码我不知道如何开始。

我该如何编写测试?有最佳实践吗?

如果我没猜错,你想为 C 函数编写单元测试。也许你可以为 C 函数编写一个包装器,比如:

return_type natsConnection_Connect_CPP(arg1, arg2, ..., argN)
{
return natsConnection(arg1,arg2,...,argN);
};

然后你就可以使用 gtest 来实现你的功能了。我对 gtest 不熟悉,因为我以前从未使用过它。

如果您要测试 C++ class,则模拟该 C++ 并将其视为一个单元,无论它在内部调用什么。

如果您想测试 C++ class 的内部结构,包括 C 函数调用,那么 C 函数通常被简单的 #define 类函数宏模拟。示例:

#include <stdio.h>

void function (int x)
{
  printf("%d\n", x);
}

#define function(x) function(1)

int main (void)
{
  function(2); // prints 1
}