带有 google 测试的 FFF 假函数
FFF fake function with google test
我正在尝试使用 google 测试来测试我的 C 库,但是我在使用 fff.h
框架模拟函数时遇到了问题。这是我的文件结构:
.
├── Makefile.am
├── configure.ac
├── include
│ ├── Makefile.am
│ └── public_header.h
├── src
│ └── libmylib
│ ├── Makefile.am
│ ├── private_functions.c
│ ├── private_functions.h
│ ├── libmylib.la
│ └── libmylib.c
└── test
└── libmylib_test
├── Makefile.am
├── fff.h
└── test.cc
我想模拟头文件 private_functions.h
中的函数,该函数使用 fff.h
框架在 public_header.h
的函数中使用。
public_function()
{
private_function(); //This function is the one I want to mock.
}
我的测试是这样的:
#include "gtest/gtest.h"
#include "public_header.h"
#include "fff.h"
extern "C" {
#include "private_functions.h"
}
DEFINE_FFF_GLOBALS;
FAKE_VALUE_FUNC(int, function, char *, char *);
class libtest : public testing::Test
{
public:
virtual void SetUp()
{
RESET_FAKE(function);
}
virtual void TearDown()
{
}
};
TEST_F(libtest, test_fff)
{
public_function("val1", "val2");
EXPECT_EQ(function_fake.call_count, 1);
}
...
当我 运行 时,它说 private_function()
被定义了多次。
我的 test/libmylib_test/MakeFile.am
看起来像这样:
LIBSRC = $(top_srcdir)/src/libstorage
check_PROGRAMS = libmylib_test
libstorage_test_SOURCES = test.cc
libstorage_test_CFLAGS = $(AM_CFLAGS)
libstorage_test_CXXFLAGS = -I$(top_srcdir)/include -I$(LIBSRC) -std=c++11 $(AM_CPPFLAGS)
libstorage_test_LDFLAGS = $(AM_LDFLAGS) -static -pthread
libstorage_test_LDADD = $(top_srcdir)/src/libmylib/libmylib.la
我有一个解决方案,但我不确定它是否是最好的。
当我编译我的库时,我想测试它为我拥有的每个 .c
个文件生成 .o
个文件。因为我只想测试 libmylib.c
我只链接了 libmylib_la-libmylib.o
而不是 .la
文件。
src/libmylib/
中生成的 .o
个文件是:
libmylib_la-libmylib.o
libmylib_la-private_functions.o
我在 ./test/libmylib_test/
中更新的 MakeFile.am
现在看起来像这样:
LIBSRC = $(top_srcdir)/src/libstorage
check_PROGRAMS = libmylib_test
libstorage_test_SOURCES = test.cc
libstorage_test_CFLAGS = $(AM_CFLAGS)
libstorage_test_CXXFLAGS = -I$(top_srcdir)/include -I$(LIBSRC) -std=c++11 $(AM_CPPFLAGS)
libstorage_test_LDFLAGS = $(AM_LDFLAGS) -static -pthread
libstorage_test_LDADD = $(top_srcdir)/src/libmylib/libmylib_la-libmylib.o
因为我在 private_functions.h
中有另一个函数,所以我也不得不模拟那个函数,因为它没有在别处定义。
在这些更新之后,编译的测试没有问题,运行 很好。
测试文件现在看起来像这样:
#include "gtest/gtest.h"
#include "public_header.h"
#include "fff.h"
extern "C" {
#include "private_functions.h"
}
DEFINE_FFF_GLOBALS;
FAKE_VALUE_FUNC(int, function, char *, char *);
FAKE_VOID_FUNC(other_func, char *);
...
我正在尝试使用 google 测试来测试我的 C 库,但是我在使用 fff.h
框架模拟函数时遇到了问题。这是我的文件结构:
.
├── Makefile.am
├── configure.ac
├── include
│ ├── Makefile.am
│ └── public_header.h
├── src
│ └── libmylib
│ ├── Makefile.am
│ ├── private_functions.c
│ ├── private_functions.h
│ ├── libmylib.la
│ └── libmylib.c
└── test
└── libmylib_test
├── Makefile.am
├── fff.h
└── test.cc
我想模拟头文件 private_functions.h
中的函数,该函数使用 fff.h
框架在 public_header.h
的函数中使用。
public_function()
{
private_function(); //This function is the one I want to mock.
}
我的测试是这样的:
#include "gtest/gtest.h"
#include "public_header.h"
#include "fff.h"
extern "C" {
#include "private_functions.h"
}
DEFINE_FFF_GLOBALS;
FAKE_VALUE_FUNC(int, function, char *, char *);
class libtest : public testing::Test
{
public:
virtual void SetUp()
{
RESET_FAKE(function);
}
virtual void TearDown()
{
}
};
TEST_F(libtest, test_fff)
{
public_function("val1", "val2");
EXPECT_EQ(function_fake.call_count, 1);
}
...
当我 运行 时,它说 private_function()
被定义了多次。
我的 test/libmylib_test/MakeFile.am
看起来像这样:
LIBSRC = $(top_srcdir)/src/libstorage
check_PROGRAMS = libmylib_test
libstorage_test_SOURCES = test.cc
libstorage_test_CFLAGS = $(AM_CFLAGS)
libstorage_test_CXXFLAGS = -I$(top_srcdir)/include -I$(LIBSRC) -std=c++11 $(AM_CPPFLAGS)
libstorage_test_LDFLAGS = $(AM_LDFLAGS) -static -pthread
libstorage_test_LDADD = $(top_srcdir)/src/libmylib/libmylib.la
我有一个解决方案,但我不确定它是否是最好的。
当我编译我的库时,我想测试它为我拥有的每个 .c
个文件生成 .o
个文件。因为我只想测试 libmylib.c
我只链接了 libmylib_la-libmylib.o
而不是 .la
文件。
src/libmylib/
中生成的 .o
个文件是:
libmylib_la-libmylib.o
libmylib_la-private_functions.o
我在 ./test/libmylib_test/
中更新的 MakeFile.am
现在看起来像这样:
LIBSRC = $(top_srcdir)/src/libstorage
check_PROGRAMS = libmylib_test
libstorage_test_SOURCES = test.cc
libstorage_test_CFLAGS = $(AM_CFLAGS)
libstorage_test_CXXFLAGS = -I$(top_srcdir)/include -I$(LIBSRC) -std=c++11 $(AM_CPPFLAGS)
libstorage_test_LDFLAGS = $(AM_LDFLAGS) -static -pthread
libstorage_test_LDADD = $(top_srcdir)/src/libmylib/libmylib_la-libmylib.o
因为我在 private_functions.h
中有另一个函数,所以我也不得不模拟那个函数,因为它没有在别处定义。
在这些更新之后,编译的测试没有问题,运行 很好。
测试文件现在看起来像这样:
#include "gtest/gtest.h"
#include "public_header.h"
#include "fff.h"
extern "C" {
#include "private_functions.h"
}
DEFINE_FFF_GLOBALS;
FAKE_VALUE_FUNC(int, function, char *, char *);
FAKE_VOID_FUNC(other_func, char *);
...