gpt4 book ai didi

c++ - 为多个测试文件构建可执行文件

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:52 27 4
gpt4 key购买 nike

我的测试用例有 2 个 .cpp 文件。 Test1.cpp 包含 file1.c 的测试,Test2.cpp 包含 file2.c 的测试。

这两个文件都需要模拟一些常用函数,所以我将所有模拟方法放在头文件 test_header.h 中,并将此头文件包含到 Test1.cpp 和 Test2 .cpp.

在 test_header.h 中,我使用了 #ifndef#define 以避免重新定义模拟方法。但是,在构建可执行文件时,我遇到了所有模拟方法的重新定义错误

示例代码:-

Test1.cpp

#include "test_header.h"

class MocktestFile1: public ::testing::Test
{
void SetUp() {}
};

TEST_F(MocktestFile1, Func1_Test)
{
int arg1=0, arg2=0;
EXPECT_GLOBAL_CALL(mockfunc1, mockfunc1(_,_)).Times(1);
int a= Func1( arg1, arg2);
ASSERT_EQ(a, 2);
}

Test2.cpp

#include "test_header.h"

class MocktestFile2 : public ::testing::Test
{
void SetUp() {}
};

TEST_F(MocktestFile2, Func2_Test)
{
int arg1=1, arg2=1;
EXPECT_GLOBAL_CALL(mockfunc1, mockfunc1(_,_)).Times(1);
int a= Func2( arg1, arg2);
ASSERT_EQ(a, 10);
}

test_header.h

#include "gtest/gtest.h"
#include "gmock-global/gmock-global.h"


#ifndef MOCK
#define MOCK

MOCK_GLOBAL_FUNC2(mockfunc1, int(int, int));

#endif

test_runner.cpp 包含 main() 函数。

有人可以帮我解决重定义错误吗? #ifndef 不应该阻止重新定义吗?

谢谢。

最佳答案

#ifndef/#define 组合只是确保每个编译单元只看到封闭 block 一次,但是你有 < strong>两个编译单元。它们都包含封闭的 block 。

将方法定义放在自己的模块中,例如mock.cpp。在头文件中仅保留其声明

关于c++ - 为多个测试文件构建可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57943041/

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