gpt4 book ai didi

c++ - 谷歌测试的 FFF 假函数

转载 作者:行者123 更新时间:2023-12-01 14:58:22 29 4
gpt4 key购买 nike

我正在尝试使用 google test 测试我的 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用于 public_header.h 的函数中使用 fff.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);
}
...

当我运行 make 时,它​​说 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

最佳答案

我有一个解决方案,但我不确定它是否是最好的。

当我编译我的库时,我想测试它生成 .o每个 .c 的文件文件我有。因为我只想测试 libmylib.c我只链接了 libmylib_la-libmylib.o而不是 .la文件。

生成的 .o src/libmylib/ 中的文件是:

libmylib_la-libmylib.o
libmylib_la-private_functions.o

我的更新 MakeFile.am./test/libmylib_test/现在看起来像这样:
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 中有另一个功能我也不得不 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 *);
FAKE_VOID_FUNC(other_func, char *);
...

关于c++ - 谷歌测试的 FFF 假函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59287962/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com