我正在尝试向现有项目中添加一些单元测试。我可能是第一次编写单元测试,所以我的知识有限。
例如,如果我的文件Addition.cpp具有包含“ Calculate.h”,并且我想测试任何函数Additiion.cpp。我是否需要添加Calculate和Addition头文件
答案 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
添加额外的包含内容是有效的。
简而言之,在最简单的情况下,您只添加要直接测试并仔细分析每个错误的标头,因为它们可能只是您的第一个错误。