google mock link 模拟 C 函数时出错
google mock link error with mocking C function
我有以下代码,我尝试使用 google 模拟来模拟 C 函数:
这是头文件:
A.h
int getValue(int age, int* value, int* number);
这是源文件:
A.c
int getValue(int age, int* value, int* number)
{
// do something and return value
return 10;
}
这是源文件 b.c,它使用 a.h
b.c
#include <a.h>
void formValue()
{
int b = 10;
int c = 20;
getValue(1, &b, &c);
}
这是模拟文件:
AMock.hh
#include "a.h"
class AFileMock {
public:
AFileMock();
~AFileMock();
MOCK_METHOD3(getValue, int(int, int *, int *));
};
然后在测试中:
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <b.h>
#include <AFileMock.h>
using testing::_;
using testing::Return;
using testing::InSequence;
class BTest: public testing::Test {
protected:
AFileMock aFile;
public:
void SetUp() { }
void TearDown() { }
};
TEST_F(BTest, test1)
{
InSequence sequence;
EXPECT_CALL(aFile, getValue(_, _, _)).
Times(1);
formValue();
}
当我尝试 运行 这个测试时,它抱怨 Mock 文件中的 get link 错误,它说:
link error: getValue(_, _, _) is not defined
,指向Mock文件AMock.hh
.
但是如果我在 Mock 中使用 MOCK_CONST_METHOD 而不是 MOCK_METHOD,它会起作用:
MOCK_CONST_METHOD3(getValue, int(int, int *, int *));
没有编译器错误。
这是什么原因?
替换
AMock.hh
#include "a.h"
与
AMock.hh
extern "C" {
#include "a.h"
}
原因如下:In C++ source, what is the effect of extern "C"?
我有以下代码,我尝试使用 google 模拟来模拟 C 函数:
这是头文件:
A.h
int getValue(int age, int* value, int* number);
这是源文件:
A.c
int getValue(int age, int* value, int* number)
{
// do something and return value
return 10;
}
这是源文件 b.c,它使用 a.h
b.c
#include <a.h>
void formValue()
{
int b = 10;
int c = 20;
getValue(1, &b, &c);
}
这是模拟文件:
AMock.hh
#include "a.h"
class AFileMock {
public:
AFileMock();
~AFileMock();
MOCK_METHOD3(getValue, int(int, int *, int *));
};
然后在测试中:
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <b.h>
#include <AFileMock.h>
using testing::_;
using testing::Return;
using testing::InSequence;
class BTest: public testing::Test {
protected:
AFileMock aFile;
public:
void SetUp() { }
void TearDown() { }
};
TEST_F(BTest, test1)
{
InSequence sequence;
EXPECT_CALL(aFile, getValue(_, _, _)).
Times(1);
formValue();
}
当我尝试 运行 这个测试时,它抱怨 Mock 文件中的 get link 错误,它说:
link error: getValue(_, _, _) is not defined
,指向Mock文件AMock.hh
.
但是如果我在 Mock 中使用 MOCK_CONST_METHOD 而不是 MOCK_METHOD,它会起作用:
MOCK_CONST_METHOD3(getValue, int(int, int *, int *));
没有编译器错误。
这是什么原因?
替换
AMock.hh
#include "a.h"
与
AMock.hh
extern "C" {
#include "a.h"
}
原因如下:In C++ source, what is the effect of extern "C"?