将Google单元测试添加到makefile维护的项目中

时间:2018-11-08 14:40:32

标签: c++ unit-testing googletest

我正在尝试向现有项目中添加一些单元测试。我可能是第一次编写单元测试,所以我的知识有限。

  • 我是否还需要将项目文件的所有头文件都包含到测试文件中?

例如,如果我的文件Addition.cpp具有包含“ Calculate.h”,并且我想测试任何函数Additiion.cpp。我是否需要添加Calculate和Addition头文件

1 个答案:

答案 0 :(得分:0)

您很有可能不会。

我花了一些时间考虑您的问题,我认为我从未见过关于头文件和单元测试的任何特殊规则。但是,根据我的经验,我认为我们可以从以下几点开始:

仅添加要进行单元测试的标头,并在添加第二个标头之前仔细考虑。

那是什么意思?好吧,假设您要测试Addition.h API,然后在Test.cpp

上编写以下内容
#include "gtest/gtest.h"

#include "Addition.h"

TEST(AdditionTest, TwoPlusTwo) {
  EXPECT_EQ(4, Add(2, 2));
}

您点击编译,然后收到此消息:

In file included from 
Test.cpp:3:
Addition.h:4:1: error: unknown type name 'result_t'
result_t Add(int a, int b)
^
1 error generated.

恭喜!您的单元测试发现了一个错误!显然您的Addition.h标头不是self-contained,因为它试图使用编译器尚不知道的类型result_t。您可以通过将实现类型result_t的头文件添加到Addition.h,而不是 Test.cpp来解决此问题。

当然,有时有时可以在测试本身的包含文件中添加新的标头。假设Addition.h接收到一个result_t*的参数,并且result_t现在是一种不透明类型,仅对于Addition.cpp中的内部实现才知道。在这种情况下,您的单位可能需要比result_t了解更多有关Addition.h的知识,这使得向Test.cpp添加额外的包含内容是有效的。

简而言之,在最简单的情况下,您只添加要直接测试并仔细分析每个错误的标头,因为它们可能只是您的第一个错误。