【问题标题】:How to test C++ code when using C functions使用 C 函数时如何测试 C++ 代码
【发布时间】:2020-06-10 06:16:32
【问题描述】:

我写了一个c++类,这个类使用了第三方写的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.
  }
}

上述类使用从c导入的函数:natsConnection_Connect,natsConnection_SubscribeSync

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

我如何编写测试?有最佳做法吗?

【问题讨论】:

    标签: c++ c unit-testing googletest


    【解决方案1】:

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

    如果你想测试 C++ 类的内部结构,包括 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
    }
    

    【讨论】:

      【解决方案2】:

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

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

      然后您可以使用 gtest 来执行您的功能。我对 gtest 不熟悉,因为我以前从未使用过它。

      【讨论】:

        猜你喜欢
        • 2015-11-22
        • 2011-04-17
        • 2015-11-12
        • 1970-01-01
        • 2021-10-26
        • 2012-05-15
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多