bounty将在6天后过期。回答此问题可获得+50声望奖励。ThrowsError希望奖励现有答案。
我已经使用googletest为我的Android NDK项目包含.c文件。我已经使用了类型.cpp的测试类做同样的事情。我想使用.c文件代替。我得到以下错误,当我尝试使用它:
Running main() from gtest_main.cc
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (1 ms total)
[ PASSED ] 0 tests.
我该怎么解决这个问题?
1条答案
按热度按时间sdnqo3pr1#
不能使用
.c
文件代替.cpp
文件在googletest中编写测试类。.c
文件应包含C语言源代码,C/C编译器将假定.c
文件将被编译为C语言。.cpp
文件应包含 C 源代码,C/C编译器将假定.cpp
文件将被编译为C。C和C是相关但不同的编程语言。C比C古老得多,也简单得多。C语言中没有类。包含类的C源代码不能编译为C。
Googletest是一个用C而不是C编写的单元测试框架,它要求你用C编写测试代码,使用框架类。你的测试必须用
.cpp
(和.h
)文件编写,这样编译器就会把它们编译成C。然而,你 * 可以 * 使用googletest对C代码进行单元测试。C代码将在
.c
和.h
文件中,但你必须像往常一样在.cpp
和.h
文件中编写你的 * 单元测试 *。C/C编译器知道.c
文件将被编译为C,.cpp
文件将被编译为C。当你想在你的C单元测试代码中使用
#include "some_header.h"
时,你必须处理一个小的复杂问题,some_header.h
是C语言头文件之一:C编译器将处理
some_header.h
,并且只要知道 *some_header.h
* 是一个C语言头文件 *,它 * 就可以 * 正确地处理它 *。要通知C++编译器some_header.h
是一个C头文件,您可以编写以下代码:如果你不把
extern "C" { ... }
放在#include
的C语言头文件周围,那么你将在链接时得到未定义符号的错误。我建议您尝试使用包含以下三个文件的项目:
返回_一个.h
返回一个.c
测试返回一个.cpp
得到这个项目编译,链接和运行与googletest。
您可能会发现this question的答案很有帮助。