Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用.c文件而不是.cpp文件在google test中编写测试类?_C++_C_Unit Testing_Googletest - Fatal编程技术网

C++ 如何使用.c文件而不是.cpp文件在google test中编写测试类?

C++ 如何使用.c文件而不是.cpp文件在google test中编写测试类?,c++,c,unit-testing,googletest,C++,C,Unit Testing,Googletest,我已经在我的Android NDK项目contain.c文件中使用了googletest。我使用了一个.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 t

我已经在我的Android NDK项目contain.c文件中使用了googletest。我使用了一个.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.
如何解决这个问题?

您不能使用.c文件而不是.cpp文件在googletest中编写测试类

.c文件应包含c语言源代码,c/c++编译器将假定.c文件 将被编译为C

文件应包含C++语言源代码,C/C++编译器将假设.cpp文件 是编译为C++ + < /p>

C和C++是相关的,但不同的编程语言。C比C++更古老和更简单。 C语言中没有类。包含类的C++源代码不能编译为C.< GoGoLestEt是一个用C++编写的单元测试框架,而不是C,它要求您编写 C++中的测试代码,使用框架类。您的测试必须在.cpp和.h文件中编码,以便 编译器将编译它们为C++ +/p> 但是,您可以使用googletest对C代码进行单元测试。C代码将在.C和.h文件中,但是 必须像往常一样在.cpp和.h文件中编写单元测试。C/C++编译器知道这一点 C文件将被编译为C,.CPP文件将被编译为C++。p> 当您想要包含一些_header.h时,您必须处理一个小的复杂问题 你的C++单元测试代码,和某个HealthHealth.h是C语言的头文件之一:

C++编译器将处理某个HealthHealth.h,并且它可以正确地处理它 正如我们所知,some_header.h是一个C语言头文件。通知C++编译器,某个标题。h 是一个C头,您可以这样写:

extern "C" {
#include "some_header.h"
}
如果不将外部C{…}放在C语言头的include周围,则会得到未定义的符号 链接时的错误

我建议您尝试一个包含以下三个文件的项目:

返回1.h

返回1.c

测试返回1.cpp

使用googletest编译、链接并运行此项目


你可能会发现这个问题的答案很有帮助。

我不明白。为什么您关心文件的扩展名是.c还是.cpp?为什么不直接使用一个能正确描述文件内容的版本呢?我遇到了某些编译问题,无法识别类型转换错误:无法转换'MyVersion{aka tagMYVersion}'对于参数'2'的'MyStatus',当我为项目单独运行ndk build/当我在.c文件而不是.cpp中编译源代码时,没有这样的编译问题,因此需要一种使用.c文件运行gtest的方法,因此它仅适用于我的部分c代码!当我尝试只包含头文件而不包含要测试的.c文件时,错误:对“\u FreeRetransmitterQueue”collect2:ld的未定义引用返回1退出状态make.exe:**[obj/local/armeabi/SmartTest]错误1当我包含.c文件时,我遇到某些无法识别类型转换的编译问题错误:无法将参数“2”的“MyVersion{aka tagMYVersion}”转换为“MyStatus”。当我包含.c文件时,我遇到某些无法识别类型转换的编译问题错误:无法转换“MyVersion{aka tagMYVersion}”'到参数'2'的'MyStatus',当我为项目单独运行ndk build/当我在.c文件中编译源代码而不是在其他文件中编译源代码时,没有此类编译问题。cpp@user3054298对不起,我不明白你想说什么。如果您发布了.c.file和编译器命令行,可能会产生错误。我面临的问题是C++编译器中没有识别隐式类型转换。所以我必须修改我的.c文件,并使用显式类型的浇铸。有没有办法在不改变源代码的情况下解决这个问题?谢谢你的帮助
// return_one.h
#ifndef RETURN_ONE_H
#define RETURN_ONE_H

// A C library :)

// A C function that always return 1.
extern int return_one(void);

#endif
// return_one.c
#include "return_one.h"

int return_one(void)
{
    return 1;
}
// test_return_one.cpp
#include "gtest/gtest.h"
extern "C" {
#include "return_one.h"
}

TEST(t_return_one, returns_1)
{
    EXPECT_EQ(1,return_one());  
}

int main(int argc, char **argv)
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}