我写了一个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函数写一个封装器,比如说。
return_type natsConnection_Connect_CPP(arg1, arg2, ..., argN)
{
return natsConnection(arg1,arg2,...,argN);
};
然后你就可以用gtest来测试你的函数。我对gtest不熟悉,因为我从来没有用过它。
如果你要测试C++类,那就模拟那个类,把它当作一个单元,不管它内部调用什么。
如果你要测试C++类的内部,包括C函数的调用,那么C函数常用简单的mocking #define
类似函数的宏。例如:
#include <stdio.h>
void function (int x)
{
printf("%d\n", x);
}
#define function(x) function(1)
int main (void)
{
function(2); // prints 1
}