C++ 在 Eclipse 中使用 googletest:如何?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3951808/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
using googletest in eclipse: how?
提问by user478310
I've downloaded google test, but now I've no idea on how to link it to my project in eclipse. Should I add it as a source folder? Should include it as g++ included library? And how can I run test then?
我已经下载了 google test,但现在我不知道如何将它链接到我在 eclipse 中的项目。我应该将它添加为源文件夹吗?应该将它包含为 g++ 包含的库吗?那么我该如何运行测试呢?
回答by Josh Glover
Using Riga's excellent answer, here is a summary of how I got it to work:
使用里加的优秀答案,这里是我如何让它工作的总结:
- Created a new C++ project in Eclipse (I chose Executable > Empty Project)
- Downloaded googletest 1.5.0, untarred, and ran
./scripts/fuse_gtest_files.py . <project-dir>/contrib
- Back in Eclipse, excluded the
contrib
directory from the Release build configuration, and added<project-dir>/contrib
to the include directories (odd, I know) - Added a
src
directory and added a class namedFoo
(see below for the contents ofFoo.h
--I leftFoo.cpp
empty for now) - Added a
test
directory in Eclipse, excluded it from the Release build configuration, added<project-dir>/contrib
to the include directories, and added new source filesFooTest.cpp
andAllTests.cpp
(see below for contents) - Built and ran the project!
- 在 Eclipse 中创建了一个新的 C++ 项目(我选择了 Executable > Empty Project)
- 下载googletest 1.5.0,解压,然后运行
./scripts/fuse_gtest_files.py . <project-dir>/contrib
- 回到 Eclipse,
contrib
从 Release 构建配置中排除该目录,并添加<project-dir>/contrib
到包含目录中(奇怪,我知道) - 添加了一个
src
目录并添加了一个名为的类Foo
(请参阅下面的内容Foo.h
--我暂时Foo.cpp
留空) test
在 Eclipse 中添加了一个目录,将其从发布构建配置中排除,添加<project-dir>/contrib
到包含目录中,并添加了新的源文件FooTest.cpp
和AllTests.cpp
(内容见下文)- 构建并运行项目!
Foo.h:
福.h:
#ifndef FOO_H_
#define FOO_H_
class Foo {
public:
virtual ~Foo();
Foo();
bool foo(void) { return true; }
};
#endif /* FOO_H_ */
FooTest.cpp:
FooTest.cpp:
#include "gtest/gtest.h"
#include "Foo.h"
namespace {
class FooTest : public ::testing::Test {
protected:
Foo foo;
};
TEST_F(FooTest, Foo) {
ASSERT_TRUE(foo.foo());
}
}
AllTests.cpp:
AllTests.cpp:
#include "gtest/gtest.h"
#include "FooTest.cpp"
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Here are the detailed steps:
以下是详细步骤:
- In Eclipse, open the Filemenu and select New> C++ Project
- Project Type: Executable> Empty Project
- Toolchain: Linux GCC
- Click Finish
- Open a terminal and
cd /tmp
wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
cd gtest-1.5.0/
./scripts/fuse_gtest_files.py . <project-dir>/contrib
- Back in Eclipse, right-click on the project folder in the Project Explorer pane, then select Refresh
- In the Project Explorer pane, right-click on the
contrib
folder, select Exclude from build...*, untick only the **Releasebox, and click OK - Right-click on the
contrib
folder and select Properties> C/C++ Build> Settings> Tool Settingstab > GCC C++ Compiler> Directories - Click on the Add...button, then the Workspace...button, then select
<project-name>/contrib
and click OKto add the directory - Click OKonce more to accept your changes to the build settings
- Right-click on the project in the Project Explorer pane and select New> Folder, enter
src
as its name, and click OK - Right-click on the
src
folder in the Project Explorer pane and select New> Class, name itFoo
, then click OK(see above for contents ofFoo.h
;Foo.cpp
can be left as is) - Right-click on the project in the Project Explorer pane and select New> Folder, enter
test
as its name, and click OK - Follow the steps above to add
<project-name>/contrib
and<project-name>/src
as include directories to thetest
directory - Right-click on the
test
folder, then select New> Source Fileto addAllTests.cpp
to thetest
folder, then repeat the same steps to addFooTest.cpp
(see above for contents) - Right-click on
FooTest.cpp
and select Exclude from build..., click the Select Allbutton, then OK - Right-click on the project in the Project Explorer pane, and select Properties> C/C++ Build> Settings> Tool Settingstab > GCC C++ Linker> Libraries, then click the Add...button, enter pthread(required by googletest), click OKto add the library, then OKonce more to accept the changes
- Hit Ctrl-bto build the project
- Hit Ctrl-F11to run the project
- Victory!
- 在 Eclipse 中,打开文件菜单并选择新建> C++ 项目
- 项目类型:可执行文件>空项目
- 工具链:Linux GCC
- 单击完成
- 打开一个终端并
cd /tmp
wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
cd gtest-1.5.0/
./scripts/fuse_gtest_files.py . <project-dir>/contrib
- 返回 Eclipse,右键单击 Project Explorer 窗格中的项目文件夹,然后选择Refresh
- 在 Project Explorer 窗格中,右键单击该
contrib
文件夹,选择Exclude from build...*,仅取消勾选**Release框,然后单击OK - 右键单击该
contrib
文件夹并选择属性> C/C++ 构建>设置>工具设置选项卡 > GCC C++ 编译器>目录 - 单击Add...按钮,然后单击Workspace...按钮,然后选择
<project-name>/contrib
并单击OK添加目录 - 再次单击“确定”以接受您对构建设置的更改
- 右键单击 Project Explorer 窗格中的项目并选择New> Folder,输入
src
其名称,然后单击OK - 右键单击
src
Project Explorer 窗格中的文件夹,然后选择New> Class,将其命名为Foo
,然后单击OK(有关Foo.h
; 的内容见上文;Foo.cpp
可以保持原样) - 右键单击 Project Explorer 窗格中的项目并选择New> Folder,输入
test
其名称,然后单击OK - 按照上述步骤添加
<project-name>/contrib
和<project-name>/src
包含目录到test
目录 - 右键单击
test
文件夹,然后选择新建>源文件添加AllTests.cpp
到test
文件夹,然后重复相同的步骤添加FooTest.cpp
(内容见上) - 右键单击
FooTest.cpp
并选择Exclude from build...,单击Select All按钮,然后单击 OK - 在 Project Explorer 窗格中右键单击项目,然后选择Properties> C/C++ Build> Settings> Tool Settingstab > GCC C++ Linker> Libraries,然后单击Add...按钮,输入pthread(googletest 需要),单击确定添加库,然后再次确定接受更改
- 击中按Ctrl-B来构建项目
- 击中按Ctrl-F11运行项目
- 胜利!
回答by rundavidrun
Step 1 Install Eclipse
步骤 1 安装 Eclipse
If Eclipse is not already installed on the machine, then get the latest version of the Eclipse IDE for C/C++ Developers from the Eclipse downloads page (http://www.eclipse.org/downloads/).
如果机器上尚未安装 Eclipse,请从 Eclipse 下载页面 ( http://www.eclipse.org/downloads/)获取最新版本的 Eclipse IDE for C/C++ Developers 。
If Eclipse is already installed but only for Java, download the C++ plug-in following these instructions.
如果 Eclipse 已安装但仅适用于 Java,请按照以下说明下载 C++ 插件。
a. Open Eclipse and click on Help->Install New Software
一种。打开Eclipse,点击Help->Install New Software
b. In the Work with: box, type in http://download.eclipse.org/tools/cdt/releases/kepler. After a few moments, the Name box will populate. Select the following components:
湾 在 Work with: 框中,输入http://download.eclipse.org/tools/cdt/releases/kepler。片刻之后,名称框将出现。选择以下组件:
- CDT Main Features -> C/C++ Development Tools
- CDT Main Features -> C/C++ Development Tools SDK
- CDT Optional Features -> C/C++ Unit Testing Support
- CDT Optional Features -> C/C++ Unit Testing Support Source
- CDT Optional Features -> C/C++ Visual C++ Support
- CDT 主要特性 -> C/C++ 开发工具
- CDT 主要特性 -> C/C++ 开发工具 SDK
- CDT 可选特性 -> C/C++ 单元测试支持
- CDT 可选特性 -> C/C++ 单元测试支持源
- CDT 可选功能 -> C/C++ Visual C++ 支持
c. Click on Next, agree to the statements, and then Finish.
C。单击下一步,同意这些声明,然后单击完成。
Step 2 Download Cygwin
第 2 步下载 Cygwin
Install Cygwin by clicking on the setup-x86_64.exe link on the Cygwin install page (http://www.cygwin.com/install.html). After running, click Next through the defaults until you get to the Select Packages window.
通过单击 Cygwin 安装页面 ( http://www.cygwin.com/install.html)上的 setup-x86_64.exe 链接安装 Cygwin 。运行后,按默认值单击 Next,直到进入 Select Packages 窗口。
You will need to search for and install two packages: gcc and make.
您将需要搜索并安装两个软件包:gcc 和 make。
The first search term is gcc. Search for gcc and then open the Devel folder. Mark the following packages for install by clicking on the word Skip (it will then change to the build number, which may by higher than the one depicted here): gcc-core, gcc-g++, and libgcc1.
第一个搜索词是 gcc。搜索 gcc,然后打开 Devel 文件夹。通过单击“跳过”一词标记以下要安装的软件包(然后它会更改为内部版本号,可能比此处描述的要高):gcc-core、gcc-g++ 和 libgcc1。
The second search term is make. Here, we will only need the Devel package make.
第二个搜索词是 make。在这里,我们只需要 Devel 包 make。
Once these have been selected, click Next to install.
选择这些后,单击下一步进行安装。
Step 3 Download and build Google Test project
步骤 3 下载并构建 Google Test 项目
Download the latest release of GoogleTest from https://code.google.com/p/googletest/downloads/list, and extract the zip file contents into a common directory. It is important that all users are able to access this directory.
从https://code.google.com/p/googletest/downloads/list下载最新版本的 GoogleTest ,并将 zip 文件内容解压到一个公共目录中。重要的是所有用户都能够访问此目录。
To build the Google Test project:
要构建 Google 测试项目:
- Open Cygwin (find the install directory for Cygwin and double-click on Cygwin.bat).
- Change the current working directory to the unzipped GoogleTest make directory:
cd c:/<<yourpath>>/gtest-1.7.0/make/
- Build the project:
make
- Create an archived library out of the gtest-all.o file:
ar -rv libgtest.a gtest-all.o
- 打开 Cygwin(找到 Cygwin 的安装目录并双击 Cygwin.bat)。
- 将当前工作目录更改为解压后的 GoogleTest make 目录:
cd c:/<<yourpath>>/gtest-1.7.0/make/
- 构建项目:
make
- 从 gtest-all.o 文件中创建一个存档库:
ar -rv libgtest.a gtest-all.o
Step 4 Add the Cygwin bin directory to the computers PATH variable
步骤 4 将 Cygwin bin 目录添加到计算机的 PATH 变量中
Follow the instructions on this page for your version of Windows: http://www.java.com/en/download/help/path.xml, to add Cygwins bin directory to the computers PATH environment variable. (typically by adding ;C:\cygwin64\bin to the end of the current value).
按照此页面上适用于您的 Windows 版本的说明进行操作:http: //www.java.com/en/download/help/path.xml,将 Cygwins bin 目录添加到计算机的 PATH 环境变量中。(通常通过将 ;C:\cygwin64\bin 添加到当前值的末尾)。
Step 5 Create a new project that uses GoogleTest
步骤 5 创建一个使用 GoogleTest 的新项目
Start Eclipse and select File->New->C++ Project. Enter the values below and click Finish.
启动 Eclipse 并选择 File->New->C++ Project。输入以下值并单击完成。
In the Project Explore, right-click the name of the project and select Properties. Under C/C++ Build, change the Builder type to Internal Builder.
在 Project Explorer 中,右键单击项目名称并选择 Properties。在 C/C++ Build 下,将 Builder 类型更改为 Internal Builder。
Under C/C++ Build, select Settings, then click on the Includes folder under Cygwin C++ Compiler. Click on the Add button in the top box and then browse to the GoogleTest include folder.
在 C/C++ Build 下,选择 Settings,然后单击 Cygwin C++ Compiler 下的 Includes 文件夹。单击顶部框中的添加按钮,然后浏览到 GoogleTest 包含文件夹。
Lastly, under the Cygwin C++ Linker folder, select Miscellaneous and then click the Add icon under Other objects. Find the libgtest.a file that you built back in step 3 (it should be in the make directory of the unzipped gtest folder).
最后,在 Cygwin C++ Linker 文件夹下,选择 Miscellaneous,然后单击 Other objects 下的 Add 图标。找到您在第 3 步中重新构建的 libgtest.a 文件(它应该位于解压缩的 gtest 文件夹的 make 目录中)。
Thats it! Now youre ready to try it out.
就是这样!现在您可以尝试一下了。
Step 6 Write some code that uses GoogleTest
步骤 6 编写一些使用 GoogleTest 的代码
- Add a source folder by clicking File->New->Source folder. Call it src.
- Add a header file by right-clicking on the src folder and select New->Header File. Call this file Counter.h.
- Add a source file by right-clicking on the src folder and select New->Source File. Call this file Counter.cpp.
- Add another source file and call it Counter_Tests.cpp.
- 通过单击 File->New->Source folder 添加一个源文件夹。称之为 src。
- 通过右键单击 src 文件夹并选择 New->Header File 添加头文件。调用这个文件 Counter.h。
- 通过右键单击 src 文件夹并选择 New->Source File 添加一个源文件。将此文件称为 Counter.cpp。
- 添加另一个源文件并将其命名为 Counter_Tests.cpp。
Copy and paste the code below into the appropriate files:
将下面的代码复制并粘贴到相应的文件中:
Counter.h
计数器.h
class Counter {
private:
int mCounter;
public:
Counter() : mCounter(0) {}
int Increment();
};
Counter.cpp
计数器.cpp
#include <stdio.h>
#include "Counter.h"
int Counter::Increment() {
return mCounter++;
}
Counter_Tests.cpp
Counter_Tests.cpp
#include "gtest/gtest.h"
#include "Counter.h"
TEST(Counter, Increment) {
Counter c;
EXPECT_EQ(0, c.Increment());
EXPECT_EQ(1, c.Increment());
EXPECT_EQ(2, c.Increment());
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
In the Project menu select Build All. Now, to connect up the GoogleTest unit testing framework, select Run Configurations from the Run menu. From this dialog, select C/C++ Unit and click the New button.
在项目菜单中选择全部构建。现在,要连接 GoogleTest 单元测试框架,请从“运行”菜单中选择“运行配置”。从该对话框中,选择 C/C++ 单元并单击新建按钮。
It should fill in this project name automatically under C/C++ Application, if not click on Search Project to select this project. Next, click on the C/C++ Testing tab. In the Tests Runner drop-down, choose Google Tests Runner, and then click Run to watch the magic!
在C/C++ Application下应该自动填写这个项目名称,如果没有点击Search Project选择这个项目。接下来,单击 C/C++ 测试选项卡。在 Tests Runner 下拉列表中,选择 Google Tests Runner,然后单击 Run 观看魔术!
Below is a snapshot of the result. After writing more code/tests, you can click on the button highlighted in red to quickly recompile and re-run all of the tests.
下面是结果的快照。编写更多代码/测试后,您可以单击以红色突出显示的按钮以快速重新编译并重新运行所有测试。
回答by Riga
You should not add it to your source folder, make separate folder instead. This is for avoidance of dependency of your production code from testing project. Do it like this
您不应将其添加到源文件夹中,而应创建单独的文件夹。这是为了避免您的生产代码依赖于测试项目。像这样做
../ #your project folder
Makefile
src/
module1 #some module
module2 #another module
build #tmp for build
dist #binaries
contrib/
gtest
...
test/ #your test project folder
Makefile
src/
module1 #correspondent to main project's one
module2 #correspondent to main project's one
build
dist
...
I usually use google test as two files, this is very handy. Use scripts/fuse_gtest_files.py
from gtest distribution to extract them. Having only two files you can include their compilation in your test project compilation and have simple project structure.
我通常使用 google test 作为两个文件,这很方便。使用scripts/fuse_gtest_files.py
from gtest 分布来提取它们。只有两个文件,您可以将它们的编译包含在您的测试项目编译中,并具有简单的项目结构。
In your test projectspecify include directories ../contrib:../src:src
.
Thus you can include headers like this
在您的测试项目中指定包含目录../contrib:../src:src
。因此,您可以包含这样的标题
test/src/module1/class1Test.h:
测试/src/module1/class1Test.h:
#include "gtest/gtest.h"
#include "module1/class1.h"
// test class1 here
// ...
test/src/mainTest.cpp:
测试/src/mainTest.cpp:
#include "gtest/gtest.h"
#include "module1/class1Test.h"
#include "module2/class2Test.h"
// include other tests you have
// ...
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
回答by BjornArnelid
Here is my solution for Eclipse 4.3 and CDT 8.2 I felt this was somewhat easier then described above.
这是我针对 Eclipse 4.3 和 CDT 8.2 的解决方案,我觉得这比上面描述的要容易一些。
Download gtest and install it as described in the readme.txt (using cmake and make in linux)
Go to "YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Compiler-> Includes-> Include paths" and add the include folder in gtest
Go to "YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Linker-> Libraries", add the gtest folder as search path and add libraries "gtest" and "pthread"
下载 gtest 并按照 readme.txt 中的描述进行安装(在 linux 中使用 cmake 和 make)
转到“YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Compiler-> Includes-> Include paths”并在gtest中添加include文件夹
转到“YourProject-> Properties-> C/C++ Build-> Settings-> GCC C++ Linker-> Libraries”,添加gtest文件夹作为搜索路径并添加库“gtest”和“pthread”
(4. If you have tests in the same project as sources exclude tests from release build)
(4.如果你在同一个项目中有测试作为源排除发布版本中的测试)
Go to "Run-> Run Configurations..." and Create a new C/C++ Unit run configuration
Set project to your project and C/C++ Application to your Application in main tab. Set Tests Runner to Google Test Runner in C/C++ Testing tab.
转到“运行-> 运行配置...”并创建一个新的 C/C++ 单元运行配置
在主选项卡中将项目设置为您的项目并将 C/C++ 应用程序设置为您的应用程序。在 C/C++ 测试选项卡中将测试运行程序设置为 Google 测试运行程序。
(7. Error notifications may stick around in the eclipse gui, if this is the case re-indexing the project might help)
(7. eclipse gui 中可能会出现错误通知,如果是这种情况,重新索引项目可能会有所帮助)
回答by Chemado
I've tray your solution and it runs well. I can say that for compile gtest is not very clear in the README. txt.
我已经提供了您的解决方案,并且运行良好。我可以说对于编译 gtest 在 README 中不是很清楚。文本。
I've run the makefile in the /make directory through a cygwin console. In my case the compiler advise me that don't findt the pthread library. So I modified the line
我已经通过 cygwin 控制台运行了 /make 目录中的 makefile。就我而言,编译器建议我不要找到 pthread 库。所以我修改了这条线
CXXFLAGS += -g -Wall -Wextra -pthread
CXXFLAGS += -g -Wall -Wextra -pthread
and changed it to
并将其更改为
CXXFLAGS += -g -Wall -Wextra -lpthread
CXXFLAGS += -g -Wall -Wextra -lpthread
The output I get is gtest_main.a
. Then I have rename this file into libgtest.a and copy it to C:\cygwin\lib directory
.
我得到的输出是gtest_main.a
. 然后我将此文件重命名为 libgtest.a 并将其复制到C:\cygwin\lib directory
.
Then i've configure my eclipse project to use cygwin and added gtest and pthread as you say... and it works!
然后我将我的 eclipse 项目配置为使用 cygwin 并按照您的说法添加了 gtest 和 pthread ......并且它有效!
I hope it can help someone
我希望它可以帮助某人